coffee-script
بدون كسر التوافق مع الإصدارات السابقةمشكلة أخرى هي require
. على الرغم من أن حزمة الويب تقوم فقط بإنشاء تحذيرات لهذه تتطلب:
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
استبدلت حزمة الويب هذه require
بـ exceptions
:
على سبيل المثال ، قبل حزمة الويب:
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)
});
بعد حزمة الويب:
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
نفسه ، فقط 3 أسطر من التكوين الإضافي ونص NPM بسيط:
package.json
في الدليل output/
:{
"dependencies": {
"vm2": "latest"
}
}
vm2
كمكتبة خارجية في تهيئة Webpack:externals: {
"vm2": "require('vm2')"
}
output/
بمجرد انتهاء Webpack من جميع الأشياء:"scripts": {
"prepare-output": "cd output && npm install",
"prepare": "webpack --progress && npm run prepare-output"
}
أهلا !
لدي نفس المشكلة وإليك كيفية حلها:
أولاً ، لا يمكنني استخدام الوحدة مباشرةً كوحدة نمطية npm ، لأنني اضطررت إلى تعديل المصادر ، لذلك أنا c / c lib في مجلد من مشروعي (إنها ملفات قليلة فقط ، ولا توجد مشكلة في ذلك)
حول fs لـ sandbox.js / Contextify.js: لقد أعدت تسميتها sandbox.txt & Contextify.txt ، ثم استخدمت أداة تحميل أولية لتحميلها كنص عادي.
main.js (في الأعلى)
const sb = require('./sandbox.txt');
const cf = require('./contextify.txt');
webpack.config.js
{
test: /\.txt$/,
use: 'raw-loader'
}
لا تنس تغيير جميع مراجع sandbox.js / Contextify.js إلى sandbox.txt / Contextify.txt في main.js.
main.js (حول السطر 250)
[...]
const host = {
version: parseInt(process.versions.node.split('.')[0]),
require: eval('require'),
process,
console,
[...]
لقد غيرت "طلب" إلى "يتطلب:" EVAL ("تتطلب") "لذلك لم تعدل حزمة الويب (على النحو الذي اقترحه Coxxs) وفعلت الحيلة.
يمكنني الآن استخدام vm2 بشكل صحيح ، دون الحاجة إليه كمكتبة خارجية.
أعلم أنه صعب جدًا وليس نظيفًا جدًا ، لكنه الحل الوحيد الذي حصلت عليه حتى الآن.
آمل أن يساعد بعضكم ويساعد أيضًا في إصلاح حقيقي.
إذا كانت لديك حلول أفضل ، فنحن نحب أن نسمعها! :)
تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.
FWIW - يبدو أن التجميع مع Webpack 5 ، بهدف node
يعمل.
التعليق الأكثر فائدة
أي تقدم في هذه المسألة؟ هذه هي الطريقة الأفضل وربما الأبسط التي وجدتها لجعل
vm2
متوافقًا معWebpack
. لا يتطلب أي تغييرات فيvm2
نفسه ، فقط 3 أسطر من التكوين الإضافي ونص NPM بسيط:package.json
في الدليلoutput/
:vm2
كمكتبة خارجية في تهيئة Webpack:output/
بمجرد انتهاء Webpack من جميع الأشياء: