Vm2: 添加 `coffee-script` 模块作为依赖项

创建于 2017-04-08  ·  23评论  ·  资料来源: patriksimek/vm2

通过 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 尝试映射所有需求时,它会崩溃,因为它无法在任何地方找到coffee-script模块。

UPD:这不是功能请求,这是 vm2 模块依赖问题。 在此模块存在此之前,它不会在没有安装咖啡脚本模块的任何环境中与指定为coffee-script的编译器选项一起使用。

wontfix

最有用的评论

@dkfiresky哇,你真的希望我强迫成千上万的用户下载咖啡脚本,即使他们不需要它,只是因为你不愿意等待一个合适的解决方案? 那很伤心。

@n-riesco 实际上这已经被支持了。 问题是放弃对coffeescript选项的支持是一个重大变化,我想先尝试一个更好的解决方案(如果有的话)。

所有23条评论

感谢您报告问题。 我几乎没有使用 Webpack 的经验,所以我错了,但是如果你在父项目中添加coffee-script作为依赖项怎么办? 我假设 Webpack 进程需要与 Node 相同的方式 - 它搜索所有node_modules文件夹直到根目录。

我不想仅仅因为您的模块需要它而添加coffee-script作为我自己项目的依赖项。 我不使用coffee-script

如果您在自己的项目中使用某人的模块,则必须将其声明为依赖项。

此外,如果有人将安装您的模块并且该人不会在任何地方(在项目或全局中)安装coffee-script模块,它也会触发该错误。 它不依赖于 Webpack。

好的,我以为您正在使用咖啡脚本。 在这种情况下,这个库不是 webpack 兼容的 atm。 如果我有空闲时间,我会试着弄清楚这一点。

这不是与 webpack 兼容的情况。

这是您如何发布模块并将其提供给 npm 的一个案例。

我不同意,这个库在没有咖啡脚本的情况下可以正常工作,所以没有理由将它链接为必需的依赖项。 它仅在用户明确声明他或她想要使用咖啡脚本时使用。 我会将其重构为某种插件机制。

原因是您在代码中明确要求coffee-script ,假设它应该以某种方式安装。

如果你已经在你的机器上安装了coffee-script - 那没关系并且可以工作,否则当我没有在任何地方安装coffee-script并启动带有编译器选项集的虚拟机时,它会导致问题到“coffeescript”、“coffee-script”、“cs”或“text/coffeescript”之一(如 https://github.com/patriksimek/vm2/blob/master/lib/main.js#L14- L18)。

另外,我不同意这是feature request ,因为如果您的模块尚未安装,则它不能与coffee-script编译器一起使用。 并且文档没有说明预安装coffee-script的要求。

是的,您已经准确地描述了它现在是如何工作的。 如果编译器设置为咖啡,库希望用户安装咖啡脚本。

您对文档是正确的,它已更新。

是的,文档修复并不能解决问题。 您的代码中仍然有require('coffee-script')行,这将产生错误,至少对于 webpack 而言。

是的,正如我在上一篇文章中所写的,我将把它重构为某种插件机制,以便它与 webpack 兼容。

没关系,如果您很难运行一个简单的命令:

> 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 文档。

我在一个新的反应项目中也得到了这个,在我添加 vm2 作为依赖项之前,我没有关于咖啡脚本的错误

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 等)。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

patriksimek picture patriksimek  ·  15评论

ozsay picture ozsay  ·  5评论

wintertime-inc picture wintertime-inc  ·  5评论

unxcepted picture unxcepted  ·  11评论

seanc picture seanc  ·  3评论