webpack / babelによって変換されたコードを介してモジュールを実行しているときに、次の問題が発生します。
Module not found: Error: Can't resolve 'coffee-script' in '/node_modules/vm2/lib'
@ ./~/vm2/lib/main.js 19:10-34
@ ./~/vm2/index.js
@ ./lib/config.js
@ ./lib/server.js
https://github.com/patriksimek/vm2/blob/master/lib/main.js#L19
この行では、 coffee-script
モジュールを使用していますが、モジュールの依存関係として定義されていません。
したがって、webpackがすべてのrequiresをマップしようとすると、クラッシュしてcoffee-script
モジュールがどこにも見つからなくなります。
UPD:これは機能要求ではありません。これはvm2モジュールの依存関係の問題です。 このモジュールにこの行が存在するまで、coffee-scriptモジュールがインストールされていない環境では、 coffee-script
として指定されたコンパイラオプションでは機能しません。
問題を報告していただきありがとうございます。 私はWebpackの経験がほとんどないので、おそらく間違っていますが、親プロジェクトの依存関係としてcoffee-script
を追加するとどうなりますか? WebpackプロセスにはNodeと同じ方法が必要だと思います。つまり、ルートまでのすべてのnode_modules
フォルダーを検索します。
モジュールで必要だからといって、自分のプロジェクトの依存関係としてcoffee-script
を追加したくありません。 coffee-script
は使用しません。
自分のプロジェクトで誰かのモジュールを使用している場合は、それを依存関係として宣言する必要があります。
また、誰かがあなたのモジュールをインストールし、その人が(プロジェクトまたはグローバルの)どこにもcoffee-script
モジュールをインストールしていない場合、そのエラーもトリガーされます。 Webpackに依存しません。
わかりました、あなたはコーヒースクリプトを使用していると思いました。 その場合、このライブラリはwebpack互換のATMではありません。 時間があれば、これを理解しようと思います。
これは、webpackとの互換性の場合ではありません。
これは、モジュールを公開してnpmに提供する方法の事例です。
私は同意しません。このライブラリはCoffee-Scriptがなくても正しく機能するため、必須の依存関係としてリンクする理由はありません。 これは、ユーザーがコーヒースクリプトを使用したいと明示的に述べた場合にのみ使用されます。 これをある種のプラグインメカニズムにリファクタリングします。
その理由は、コードにcoffee-script
が明示的に必要であるためです。これは、何らかの方法でインストールする必要があることを前提としています。
すでにcoffee-script
がマシンにインストールされている場合、それは問題なく機能します。そうでない場合は、 coffee-script
がどこにもインストールされておらず、コンパイラオプションが設定されたvmを起動したときに問題が発生します。 「coffeescript」、「coffee-script」、「cs」、または「text / coffeescript」のいずれかに(https://github.com/patriksimek/vm2/blob/master/lib/main.js#L14-に記載されています) L18)。
また、モジュールがまだインストールされていない場合、モジュールはcoffee-script
コンパイラで動作しないため、これがfeature request
であることに同意しません。 また、ドキュメントには、プリインストールするcoffee-script
の要件については何も記載されていません。
はい、あなたはそれが今どのように機能するかを正確に説明しました。 ライブラリは、コンパイラがコーヒーに設定されている場合、ユーザーがコーヒースクリプトをインストールすることを想定しています。
あなたはドキュメントについて正しいです、それは更新されました。
ええ、ドキュメントの修正は問題を解決しません。 コードにはまだrequire('coffee-script')
行があり、少なくともwebpackではエラーが発生します。
はい。以前の投稿で書いたように、これをある種のプラグインメカニズムにリファクタリングして、webpackと互換性を持たせます。
1つの簡単なコマンドを実行するのが非常に難しい場合でも、気にしないでください。
> npm install coffee-script --save
私はあなたのプロジェクトが問題を修正するのをもう使用も待ちません。
@patriksimek個人的には、ある種のプラグインメカニズムを持つことの利点を理解しています。
options.compiler
が関数であるような単純なものはどうですか?
次に、CoffeeScriptが必要なユーザーは、 options.compiler
を(code) => { return require('coffee-script').compile(code, {header: false, bare: true}); }
に設定できます。
@dkfireskyうわー、あなたは本当に、あなたが適切な解決策を待つ気がないという理由だけで彼らがそれを必要としないとしても、何万人ものユーザーにコーヒースクリプトをダウンロードするように強制することを期待しましたか? それは悲しいことだ。
@ n-riesco実際にはこれはすでにサポートされています。 問題は、 coffeescript
オプションのサポートを終了することは重大な変更であり、最初により良い解決策を試してみたいということです(もしあれば)。
@patriksimekモジュールを正しく提供することを期待しています。 コーヒースクリプトの使用はあなた自身の責任です。 使用する場合は、依存関係として定義する必要があります。 同意しない場合は、そのrequireステートメントと、オプションとしてcoffee-script
を指定するコンパイラオプションを削除します。
この問題は、モジュールがそのままでは機能しないために発生しました。 簡単なインストールコマンドを実行するのを18日間待つのは、冗談のように聞こえます。
さらに、モジュールがcoffee-script
をコンパイルすると述べた場合は、そのモジュールを依存関係としてpackage.jsonに配信する必要があります。
あなたは本当に私が何万人ものユーザーにコーヒースクリプトをダウンロードするように強制することを期待していました
それはあなたがあなたのコードでrequire('coffee-script')
によってしたことです。 私が使用しなくても、あなたは私がコーヒースクリプトをインストールすることを期待しています。
簡単なインストールコマンドを実行するのを18日間待つのは、冗談のように聞こえます。
あなたはまだ私が決してしないと言ったことを私がすることを期待しています。 繰り返しになりますが、このモジュールは現時点ではWebpackと互換性がありません。このライブラリは使用しないでください。
@patriksimekこのモジュールは、 coffee-script
がインストールされていない環境では互換性がなく、実行できません。
@dkfireskyもちろん、そう思うなら。 私はもうあなたが間違っているとあなたに納得させることに興味がありません。 この無駄な議論をやめてもらえますか?
@patriksimekはい、確かに。 いくつかのnpmドキュメントを読んでください。
これも新しいreactプロジェクトで取得します。依存関係としてvm2を追加する前は、coffee-scriptに関するエラーはありませんでした。
Failed to compile.
/Users/mark/node_modules/coffee-script/lib/coffee-script/coffee-script.js
Module not found: Can't resolve 'module' in '/Users/mark/node_modules/coffee-script/lib/coffee-script'
議論の口調はあまり建設的ではありませんでしたが、依存関係としてcoffee-script
を追加する必要があると私は本当に信じています。 これは非常に単純なソリューションであり、さまざまな環境(Webpack、Nextなど)でこのパッケージを使用できるようになります。
最も参考になるコメント
@dkfireskyうわー、あなたは本当に、あなたが適切な解決策を待つ気がないという理由だけで彼らがそれを必要としないとしても、何万人ものユーザーにコーヒースクリプトをダウンロードするように強制することを期待しましたか? それは悲しいことだ。
@ n-riesco実際にはこれはすでにサポートされています。 問題は、
coffeescript
オプションのサポートを終了することは重大な変更であり、最初により良い解決策を試してみたいということです(もしあれば)。