coffee-script
require sin romper una compatibilidad con versiones anterioresOtro problema es require
. Aunque el paquete web solo genera advertencias para estos, se requieren:
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 en realidad reemplazó estos require
con exceptions
:
Por ejemplo, antes del paquete web:
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)
});
Después del paquete web:
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)
});
Reemplazar require
con eval('require')
puede resolver el problema por mí. Me pregunto si hay una mejor solución.
¿Algún progreso en este tema? Esta es la mejor y probablemente la forma más sencilla que he encontrado para hacer que vm2
compatible con Webpack
. No requiere ningún cambio en vm2
sí, solo 3 líneas de configuración adicional y un script NPM simple:
package.json
en el directorio output/
:{
"dependencies": {
"vm2": "latest"
}
}
vm2
como una biblioteca externa en la configuración de Webpack:externals: {
"vm2": "require('vm2')"
}
output/
una vez que Webpack haya terminado todas las cosas:"scripts": {
"prepare-output": "cd output && npm install",
"prepare": "webpack --progress && npm run prepare-output"
}
Hola !
Tengo el mismo problema y así es como lo resolví:
Primero, no puedo usar directamente el módulo como un módulo npm, porque tuve que modificar las fuentes, así que c / c la biblioteca en una carpeta de mi proyecto (son solo unos pocos archivos, no hay problema con eso)
Acerca de los fs para sandbox.js / contextify.js: los renombré sandbox.txt y contextify.txt, luego usé un cargador sin formato para cargarlos como texto sin formato.
main.js (en la parte superior)
const sb = require('./sandbox.txt');
const cf = require('./contextify.txt');
webpack.config.js
{
test: /\.txt$/,
use: 'raw-loader'
}
No olvide cambiar todas las referencias de sandbox.js / contextify.js a sandbox.txt / contextify.txt en main.js.
main.js (alrededor de la línea 250)
[...]
const host = {
version: parseInt(process.versions.node.split('.')[0]),
require: eval('require'),
process,
console,
[...]
Cambié el "require" a "require: eval ('require')" para que webpack no lo modifique (como sugirió Coxxs) e hizo el truco.
Ahora puedo usar vm2 correctamente, sin necesitarlo como biblioteca externa.
Sé que es bastante complicado y no muy limpio, pero es la única solución que tengo hasta ahora.
Espero que pueda ayudar a algunos de ustedes y también ayudar en una solución real.
Si tiene mejores soluciones, ¡nos encantaría escucharlas! :)
Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.
FWIW: el paquete con Webpack 5, con un objetivo de node
parece funcionar.
Comentario más útil
¿Algún progreso en este tema? Esta es la mejor y probablemente la forma más sencilla que he encontrado para hacer que
vm2
compatible conWebpack
. No requiere ningún cambio envm2
sí, solo 3 líneas de configuración adicional y un script NPM simple:package.json
en el directoriooutput/
:vm2
como una biblioteca externa en la configuración de Webpack:output/
una vez que Webpack haya terminado todas las cosas: