2017-01-15 3 views
5

私はいくつかの外部依存関係を持つAngular2プロジェクトでwebpack2を使用しています。これらの依存関係のいくつかはcommonjsを使用していて、以下のようなコンポーネントを宣言されています。これは、以下のエラーが発生module.idを解決するにはwebpack2を使用して文字列エラーにする必要があります

@Component({ 
    moduleId: module.id, 
    templateUrl: 'mycomponent.html' 
    ... 
}) 

を:

いくつかの研究の後
Error: moduleId should be a string in "MyComponent" 

を、私はこれを持っているコンポーネントを期待WebPACKのが原因で把握しますidは数値として、Angularは文字列としてそれを宣言します。私は依存コードを変更することはできません。この種の依存関係で生きるために私は何ができますか?

ありがとうございます!

答えて

2

ここで私はその依存関係を今生きています。文字列置換ローダーを使用して私のためにその行を削除してください:

{ test: /.*node_modules\/my-dependency-folder\/.*\.js/, loader: 'string-replace-loader', query: { search: 'moduleId: module.id,', replace: '' } } 

これは誰かが同じ問題を持つのに役立ちます。

0

それが動作ライン

moduleId: module.id, 

を削除します。

+0

モジュールIDなしでwebpack [解決相対パス](http://stackoverflow.com/questions/37178192/angular2-what-is-the-meanings-of-module-id-in-component)を実行しますか? – Pavel

+0

私が言ったように、私はすべてのサードパーティのライブラリからすべてのmodule.id参照を削除することはできません。彼らは毎回npmで引っ張られます。プロジェクトで作業する必要のある人はすべてこれを行う必要があります。 @pavel、yes Webpackは相対パスを解決する必要はありません。 – Juliano

+0

これを解決するにはより良い方法が必要です。私は、string-replace-loaderを介してすべてのmodule.id宣言を置き換えるルールを追加しようとしました。しかし、テンプレートは './mytemplate.html'のようなディレクトリを参照するのではなく、 'mytemplate.htnl'を宣言するだけで、まだ動作しません。後者はWebpack – Juliano

0

これは助けになるかどうかわかりませんが、とにかく誰かがそれを必要とするかもしれません(私はやった!)。

だから、最悪のケースでは)の.jsファイルmodule.idを検索し、.toString()方法(module.id.toString()を追加することが可能である、それは問題を解決します。

関連する問題