9

resolve.root私たちのプロジェクトは、絶対パスでモジュールをインポートするために webpack オプションを使用しています。(のようなものを避ける../../../module
現在の状態では、プロジェクトは完全に正常に動作するbabel-loaderを使用しています。
私の仕事はアプリを Angular 2 に移行することです。
そのため、現在 TypeScript に移行中です。
どういうわけか、ts-loaderresolve.rootはwebpack 構成のオプションと組み合わせて動作しないようです。

webpack.config.jsの例

resolve: {
    root: [
        path.resolve('./node_modules'),
        path.resolve('./app'),
        path.resolve('./app/lib'),
    ]
},

モジュールのインポートの例
import AbstractListState from 'states/abstract_list_state';

ディレクトリはstatesディレクトリ内にありapp/libます。

実行時のエラーwebpack

ERROR in ./app/mainViews/panel/panel.controller.ts
Module not found: Error: Cannot resolve module 'states/abstract_list_state' in C:\Users\...\Project\app\mainViews\panel
 @ ./app/mainViews/panel/panel.controller.ts 4:28-65
4

1 に答える 1

2

バージョン 2.0 より前の TypeScript は、ディレクトリからの絶対パスを使用してモジュールをロードしようとしますnode_modules。これは、TypeScript のモジュール結果がデフォルトで「ノード」に設定されているためです。つまり、ノードの require メソッドのように機能します。そのため、アプリのビルドに webpack を使用している場合でも、TypeScript (およびそのコンパイラ) は引き続きファイルを読み込もうとします。

webpack がモジュールを絶対パスでインポートできるようにするには、戻ってrequireメソッドを使用する必要があります。このようにして、TypeScript は webpack に何かをインポートできるようにします。ただし、もちろん、型推論、オートコンプリートなどは得られません...

または、TypeScript 2.0 ベータ版に更新して、これを試してください: https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#module-resolution-enhancements-baseurl-path-mapping -rootdirs-and-tracing

于 2016-08-12T10:06:25.600 に答える