2017-11-21 15 views
4

私のデスクトップアプリケーションは、インタフェースにElectron + Reactを使用し、Edge.jsを使用してNodeとC#アプリケーションを接続しています。サードパーティのライブラリで動的な要件を修正するにはどうすればよいですか?

私の問題はです:Edge.js依存性は、以下のerrorをスローするためのWebPACKは自分のアプリケーションをバンドルするために失敗している:

重要な依存関係:依存関係の要求が表現

です

問題はEdge.jsに次の動的要件があることです。

var compilerName = 'edge-' + language.toLowerCase(); 
var compiler = require(compilerName); 

ほとんどの場合、compilerNameは「edge-cs」に変換されますが、Webpackではこれを特定できません。

どうすればこの問題を解決できますか?人々はrequire contextまたはContextReplacementPluginを設定することを提案していますが、どちらも通常require('./directory/' + variable)の場合に適用され、require(variable)の場合はどのように使用するのか分かりません。

注:サードパーティのライブラリコードを変更する必要がないソリューションが必要です。

+0

条件文を使用しますか?例えば。変数名をrequireに渡すのではなく、 '' language = xならばx''を必要としますか? – csilk

+0

webpackはすべての可能な要件をバンドルにバンドルする必要があり、必要なものをプログラムで決定するときに、必要なものをパッケージ化時に伝えることができないため、これは機能しません。しかし、csilkとnileshのどちらを使うかは、静的な文字列として必要な可能性のあるすべてのものをwebpackに表示するので使用できます。それはコードをより冗長にしますが、それはwebpackの制限です。 – jfriend00

+0

@ jfriend00でも、サードパーティ製のライブラリコードを変更する必要があります。 – user8983325

答えて

1

私はこれが可能ではないと思っていますが、あなたは以下の大きなスイッチのようなものを考えましたか?それは示唆されているhere

switch (name) { 
    case 'a': return require('./a'); 
    case 'b': return require('./b'); 
    // etc... 
} 
+0

私はこの提案が問題を解決することを理解しますが、第三者コードを変更する必要があります。このスイッチは、ノードモジュール内に実装する必要があります。 – user8983325

+0

あなたはあなたのコードにこれを書いています。あなたが欲しいものを読み込むためのラッパーのようなものです。 – nilesh

+0

申し訳ありませんが、私は理解できませんでした。 'require(variable)'はサードパーティのモジュールモジュール(edge.js)の内部で行われます。私のコードでは 'require( 'electron-edge')'を実行していますが、これは問題ありません。問題はモジュール内にあります。 switch-caseステートメントはどこに置くのですか? (あなたの時間のためのthx) – user8983325

関連する問題