5

モジュールの宣言ファイルを手動で提供する必要なしに、node_modules ディレクトリからモジュールを直接インポートするのは素晴らしいことだと思います (宣言はモジュール自体で提供されると仮定しましょう)。問題は宣言に伴う依存関係だと思います(ファイルパスはモジュールに対して相対的に解決できますが、重複が発生し、コンパイラはそれを処理できません)。npm リポジトリから簡単にインストールするだけでは十分ではなく、宣言を手動で検索してプロジェクトに提供する必要があるため、現在ノード モジュールを操作するのは非常に不便です。私たちのプロジェクトが 10 個のノード モジュールに依存しており (すべてに宣言があります)、1 年後にそれらを更新したいとします。新しい宣言を手動で検索して、このようなプロジェクトは約 20 件あります (悪夢になるでしょう)。ノードモジュールから .ts ファイルを直接インポートするオプションが必要でしょうか?

何か提案はありますか?

これは、あなたの意見を聞くための CodePlex からの再投稿です ...

4

2 に答える 2

2

grunt-typescript を使用している場合、少なくとも私にとってはこれを解決するプル リクエストがあります。https://github.com/k-maru/grunt-typescript/pull/36を参照

プルリクエストの README から

node_modules (つまり npm) でモジュールを操作する

npm パッケージを使用する標準的な方法は、パッケージを指定する定義ファイルを typescript に提供し、そこからモジュールをインポートすることです。

///<reference path="path/to/mod.d.ts" />
import mod = module('mod')

typescript コンパイラは、importを nodejsに変換しrequireます。

var mod = require('mod')

npm がインストールされたパッケージへの正確なパスを知る必要があり、複数レベルの依存関係を扱っている場合、npm はほとんどすべてのレベルでパッケージを配置できるため、これは非常に扱いにくいものです。

node_modulesgrunt 構成のオプションを使用importすると、パッケージがグローバルではなくローカルにインストールされている限り、パッケージが npm によってインストールされた正確なレベルを知る必要なく、npm パッケージを作成できます。

importtypescriptソースのnpmモジュールに

import npmModule = module('node_modules/npmModule/foo')

ほとんどの場合、これが機能する幸運なチャンスが原因です。node_modules/npmModule/foo.d.tsTypescriptコンパイラは、ルートに向かう途中のある時点でtypescript定義ファイルが存在する場合、それを読み取り、結果のjavascriptファイルには必要に応じてrequireforが含まれnpmModule/fooます。

于 2013-06-11T10:52:19.860 に答える
1

node モジュールに組み込みの typescript サポートが含まれることはないと思います。この言語はまだ 0.x リリースであり、公式にはアルファ版として記述されています。

それにもかかわらず、typescript の構成プロセスを容易にする手段があります。Github には、次のような .d.ts ファイルの膨大なコレクションが既に含まれています。

https://github.com/borisyankov/DefinitelyTyped または https://github.com/soywiz/typescript-node-definitions

このツールを見てみたいかもしれません: https://github.com/Diullei/tsd . 私はそれを使用したことはありませんが、それはあなたが探しているもののようです。

さらに、.d.ts ファイルの公式データベースが計画されていると聞いています。残念ながらリンクが見つかりませんでしたが、これが実装されるまでにはしばらく時間がかかるでしょう。

于 2013-04-20T20:11:23.430 に答える