[解決済み] TypeScript インポートパスエイリアス
質問
私は現在、TypeScriptで書かれた複数のNodeモジュールで構成されるTypeScriptアプリケーションに取り組んでいます。
node_modules
ディレクトリにインストールされています。
続ける前に、私はTypeScript 2.0を使っていることを記しておきたい。必要であれば2.1の開発版も使うことに抵抗はない。私はただ、これを動作させたいだけなのです。
各Nodeモジュールの構造は、以下のようなものです。
dist/
es2015/
index.js
utils/
Calculator.js
Calculator.d.ts
Date.js
Date.d.ts
Flatpack.js
Flatpack.d.ts
src/
index.ts
utils/
Calculator.ts
Date.ts
Flatpack.ts
dist フォルダが生成されるソースで、このパスの指定は
outDir
の中で
tsconfig.json
ファイルの中にあります。また
main
プロパティで
package.json
を
dist/es2015/index.js
.
重要な注意点
-
私のプロジェクトでは
moduleResolution
型のnode
- TypeScript 2.0を使用しています。
-
パッケージの中からファイルをインポートする方法を聞いているのではありません。私はNpm経由でパッケージをインストールし、それを
packagename/
を通してインポートしています。
ここで、私の質問/問題が発生します。このモジュールからファイルをインポートしている間、私はこれを行うことができるようにしたいと思います。
import {Sin, Cos, Tan} from "common-utils/utils/Calculator";
しかし、このファイルでは
dist/es2015/utils
ディレクトリに解決できません。理想的には、インポートがこの特定の
dist
フォルダから解決されるのが理想的です。
上記のimportは、以下のように書かないとうまくいきません。
import {Sin, Cos, Tan} from "common-utils/dist/es2015/utils/Calculator";
しかし
dist/es2015
を毎回書くのは理想的ではありませんし、いくつかのインポートがとても長く見えてしまうだけです。私のモジュールが
dist/es2015
ディレクトリに解決するようにモジュールを設定する方法はありますか?私はプロジェクトの内部にオーバーライドを置く必要はありません。理想的には、各モジュールはファイルがどこから解決されるかを指定します。
Jspmで使用するプラグイン/モジュールを作成する場合、Jspmの中の
package.json
の中で指定することができます。
"jspm": {
"registry": "npm",
"jspmPackage": true,
"main": "my-module",
"format": "amd",
"directories": {
"dist": "dist/amd"
},
私はTypeScriptで上記に相当するものを探しています(もし存在すれば)。マッピングディレクティブで、エンドユーザーが
npm install my-cool-package
を実行し、アプリ内で何かをインポートしようとすると、デフォルトですべてのインポートが
commonjs
ディレクトリに解決されます (上記の Jspm の例では amd を使用していますが、前提は同じです)。
これは可能ですか、それとも私はここで何かを誤解していますか?私は、いくつかの新しいパス マッピング機能が最新のリリースに追加されたことを知っていますが、それらを使用するためのドキュメントはほとんど存在しません。
どのように解決するのですか?
あなたのコメントを読んだ後、私はあなたの質問を誤解していたことに気づきました! インポートされたパッケージの視点からパスを制御したい場合、単に
main
プロパティを設定します。
package.json
を、モジュールのオブジェクトグラフを適切に表現するファイルに変換します。
{
"main": "common-utils/dist/es2015/index.js"
}
プロジェクトの視点からインポートパスを制御しようとする場合、求められるのはTypeScript 2のモジュール解決のための新機能であるパスマッピングである。パスマッピングを有効にするには
tsconfig.json
を以下のように設定することでパスマッピングを有効にすることができます。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"angular2/*": ["../path/to/angular2/*"],
"local/*": ["../path/to/local/modules/*"]
}
}
}
そして、TypeScriptのファイルでは、このようにモジュールをインポートすることができます。
import { bootstrap } from 'angular2/bootstrap';
import { module } from 'local/module';
TypeScript 2 の Path Mapping 機能の詳細については、以下を参照してください。 このGithubの課題 .
あなたの場合、以下のような構成でうまくいくと思います。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"common-utils/utils/*": ["./node_modules/common-utils/dist/es2015/utils/*"]
}
}
}
関連
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] モジュール 'module-name' の宣言ファイルが見つかりませんでした。'/path/to/module-name.js' は暗黙のうちに 'any' 型を持っています。
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み】angular2 + typescriptアプリケーションにlodashをインポートする。
-
[解決済み] TypeScript Genericsに複数の型制約を指定することは可能か?
-
[解決済み] typescriptで非推奨のマークを付けることは可能ですか?
-
[解決済み] ESLint - TypeScriptの "no-unused-vars "を設定する。
-
[解決済み] TypeScriptとIterator。IterableIterator<T> 型は配列型ではありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] グローバルスコープの拡張は、外部モジュールまたはアンビエントモジュール宣言にのみ直接ネストすることができます(2669)
-
[解決済み] ngForとAsync Pipe Angular 2でObservableオブジェクトから配列を利用する。
-
[解決済み] typescriptでmoment.jsをインポートするには?
-
[解決済み] typescriptのインターフェイスを別ファイルで宣言しインポートする方法
-
[解決済み] TypeScriptをminifiedコードにコンパイルすることは可能ですか?
-
[解決済み] 他のプロパティを使用できる TypeScript インターフェース
-
[解決済み] Typescriptで<T>は何を意味するのですか?
-
[解決済み] TypeScriptのInterfacesでgetter/setterを使用することは可能ですか?重複
-
[解決済み] ...は非モジュールのエンティティに解決され、このコンストラクトを使用してインポートすることはできません」とはどういう意味ですか?
-
[解決済み] vs-codeで複数のtsconfigファイルを使用するには?