coffee-script
entfernen können, ohne die Abwärtskompatibilität zu beeinträchtigenEin weiteres Problem ist require
. Obwohl Webpack nur Warnungen für diese generiert, erfordern:
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
Das Webpack hat diese require
tatsächlich durch exceptions
:
Zum Beispiel vor dem 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)
});
Nach dem 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)
});
Ersetzen Sie require
durch eval('require')
um das Problem für mich zu lösen. Ich frage mich, ob es eine bessere Lösung gibt.
Irgendwelche Fortschritte in diesem Bereich? Hier ist der beste und wahrscheinlich einfachste Weg, vm2
mit Webpack
kompatibel zu machen. Es sind keine Änderungen an vm2
selbst erforderlich, nur 3 zusätzliche Konfigurationszeilen und ein einfaches NPM-Skript:
package.json
im Verzeichnis output/
:{
"dependencies": {
"vm2": "latest"
}
}
vm2
als externe Bibliothek in der Webpack-Konfiguration:externals: {
"vm2": "require('vm2')"
}
output/
installiert, sobald Webpack alle Aufgaben erledigt hat:"scripts": {
"prepare-output": "cd output && npm install",
"prepare": "webpack --progress && npm run prepare-output"
}
Hallo !
Ich habe das gleiche Problem und habe es folgendermaßen gelöst:
Erstens kann ich das Modul nicht direkt als npm-Modul verwenden, da ich die Quellen ändern musste, sodass ich die Bibliothek in einem Ordner meines Projekts c / c (es sind nur wenige Dateien, kein Problem damit).
Informationen zu den fs für sandbox.js / contextify.js: Ich habe sie in sandbox.txt & contextify.txt umbenannt und sie dann mit einem Raw-Loader als einfachen Text geladen.
main.js (oben)
const sb = require('./sandbox.txt');
const cf = require('./contextify.txt');
webpack.config.js
{
test: /\.txt$/,
use: 'raw-loader'
}
Vergessen Sie nicht, alle Verweise von sandbox.js / contextify.js in main.js in sandbox.txt / contextify.txt zu ändern.
main.js (um Zeile 250)
[...]
const host = {
version: parseInt(process.versions.node.split('.')[0]),
require: eval('require'),
process,
console,
[...]
Ich habe "require" in "require: eval ('require')" geändert, damit das Webpack es nicht ändert (wie von Coxxs vorgeschlagen), und es hat den Trick gemacht.
Jetzt kann ich vm2 richtig verwenden, ohne es als externe Bibliothek zu benötigen.
Ich weiß, dass es ziemlich knifflig und nicht sehr sauber ist, aber es ist die einzige Lösung, die ich bisher bekommen habe.
Ich hoffe, es kann einigen von Ihnen helfen und auch bei einer echten Lösung helfen.
Wenn Sie bessere Lösungen haben, würden wir sie gerne hören! :) :)
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.
FWIW - Die Bündelung mit Webpack 5 mit einem Ziel von node
scheint zu funktionieren.
Hilfreichster Kommentar
Irgendwelche Fortschritte in diesem Bereich? Hier ist der beste und wahrscheinlich einfachste Weg,
vm2
mitWebpack
kompatibel zu machen. Es sind keine Änderungen anvm2
selbst erforderlich, nur 3 zusätzliche Konfigurationszeilen und ein einfaches NPM-Skript:package.json
im Verzeichnisoutput/
:vm2
als externe Bibliothek in der Webpack-Konfiguration:output/
installiert, sobald Webpack alle Aufgaben erledigt hat: