coffee-script
require另一个问题是require
。 尽管webpack只是针对这些警告生成警告,但需要:
WARNING in ./~/vm2/lib/main.js
147:26-33 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
WARNING in ./~/vm2/lib/main.js
251:3-10 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
WARNING in ./~/vm2/lib/main.js
295:26-33 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
webpack实际上将这些require
替换exceptions
:
例如,在webpack之前:
Reflect.defineProperty(this, '_internal', {
value: vm.runInContext(`(function(require, host) { ${cf} \n})`, this._context, {
filename: `${__dirname}/contextify.js`,
displayErrors: false
}).call(this._context, require, host)
});
Webpack之后:
Reflect.defineProperty(this, '_internal', {
value: vm.runInContext(`(function(require, host) { ${cf} \n})`, this._context, {
filename: `${__dirname}/contextify.js`,
displayErrors: false
}).call(this._context, !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()), host)
});
将require
替换eval('require')
可以为我解决问题。 我想知道是否有更好的解决方案。
在这个问题上有什么进展吗? 这是我发现使vm2
与Webpack
兼容的最好,也可能是最简单的方法。 它不需要对vm2
本身进行任何更改,仅需要三行附加配置和一个简单的NPM脚本即可:
output/
目录中创建一个package.json
:{
"dependencies": {
"vm2": "latest"
}
}
vm2
标记为外部库:externals: {
"vm2": "require('vm2')"
}
output/
目录中:"scripts": {
"prepare-output": "cd output && npm install",
"prepare": "webpack --progress && npm run prepare-output"
}
你好 !
我遇到了同样的问题,这是我如何解决的问题:
首先,我不能直接将该模块用作npm模块,因为我必须修改源代码,因此我将c / c lib放在我项目的文件夹中(只有几个文件,这没问题)
关于sandbox.js / contextify.js的文件系统:我将它们重命名为sandbox.txt和contextify.txt,然后使用raw-loader将其作为纯文本加载。
main.js(在顶部)
const sb = require('./sandbox.txt');
const cf = require('./contextify.txt');
webpack.config.js
{
test: /\.txt$/,
use: 'raw-loader'
}
不要忘记在main.js中将sandbox.js / contextify.js的所有引用更改为sandbox.txt / contextify.txt。
main.js(约250行)
[...]
const host = {
version: parseInt(process.versions.node.split('.')[0]),
require: eval('require'),
process,
console,
[...]
我将“ require”更改为“ require:eval('require')”,因此webpack不会对其进行修改(如Coxxs的建议),并且它成功了。
现在,我可以正确使用vm2,而无需将其用作外部库。
我知道这很棘手,也不是很干净,但这是我到目前为止唯一的解决方案。
我希望它可以对您的某些人有所帮助,也可以帮助您进行真正的修复。
如果您有更好的解决方案,我们很乐意听听他们的意见! :)
由于此问题最近没有活动,因此已被自动标记为陈旧。 如果没有其他活动发生,它将关闭。 感谢你的贡献。
FWIW-与Webpack 5捆绑在一起,目标node
似乎可行。
最有用的评论
在这个问题上有什么进展吗? 这是我发现使
vm2
与Webpack
兼容的最好,也可能是最简单的方法。 它不需要对vm2
本身进行任何更改,仅需要三行附加配置和一个简单的NPM脚本即可:output/
目录中创建一个package.json
:vm2
标记为外部库:output/
目录中: