أثناء تشغيل الوحدة النمطية الخاصة بك عبر الكود الذي تم تحويله بواسطة 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
في أي مكان.
محدث: هذا ليس طلب ميزة ، هذه مشكلة تبعيات وحدة vm2. حتى يتوفر هذا السطر في هذه الوحدة ، فلن تعمل مع خيار المترجم المحدد كـ coffee-script
في أي بيئة بدون تثبيت وحدة برنامج نصي القهوة.
شكرا لك على إعادة المشكلة. ليس لدي أي تجارب تقريبًا مع Webpack ، لذا فأنا مخطئ تقريبًا ، ولكن ماذا لو أضفت coffee-script
كاعتماد في المشروع الرئيسي؟ أفترض أن عمليات Webpack تتطلب نفس الطريقة التي تتطلبها Node - فهي تبحث في جميع مجلدات node_modules
حتى الجذر.
لا أريد إضافة coffee-script
كتبعية لمشروعي الخاص فقط لأن وحدتك تتطلب ذلك. لا أستخدم coffee-script
.
إذا كنت تستخدم وحدة شخص ما في مشروعك الخاص ، فيجب أن تعلن عنها على أنها تبعية.
أيضًا إذا قام شخص ما بتثبيت الوحدة النمطية الخاصة بك ولم يكن لدى هذا الشخص وحدة coffee-script
مثبتة في أي مكان (في مشروع أو عالمي) ، فسيؤدي ذلك أيضًا إلى ظهور هذا الخطأ. لا يعتمد على Webpack.
حسنًا ، اعتقدت أنك تستخدم نص قهوة. في هذه الحالة ، هذه المكتبة ليست ماكينة صراف آلي متوافقة مع webpack. سأحاول معرفة ذلك إذا كان لدي بعض وقت الفراغ.
هذه ليست حالة توافق مع حزمة الويب.
إنها حالة تتعلق بكيفية نشر الوحدة الخاصة بك وتقديمها إلى npm.
لا أوافق ، تعمل هذه المكتبة بدون برنامج نصي القهوة بشكل صحيح ، لذا لا يوجد سبب لربطها بالتبعية المطلوبة. يتم استخدامه فقط عندما يذكر المستخدم صراحة أنه يريد استخدام نص القهوة. سأقوم بإعادة تشكيل هذا إلى نوع من آلية البرنامج المساعد.
السبب هو أنك تطلب صراحة coffee-script
في التعليمات البرمجية الخاصة بك ، والتي تفترض أنه يجب تثبيتها بطريقة ما.
إذا كنت قد قمت بالفعل بتثبيت coffee-script
على جهازك - فهذا جيد وسيعمل ، وإلا فسوف يتسبب ذلك في مشكلة عندما لا يكون لديّ coffee-script
مثبتًا في أي مكان وقمت بتشغيل vm مع مجموعة خيارات المترجم إلى أحد "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')
في شفرتك ، والذي سينتج الخطأ ، على الأقل لحزمة الويب.
نعم ، وكما كتبت في المنشور السابق ، سأقوم بإعادة تشكيل هذا النوع من آلية المكونات الإضافية بحيث يكون متوافقًا مع حزمة الويب.
لا تهتم ، إذا كان من الصعب عليك تشغيل أمر واحد بسيط:
> 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 أتوقع منك تقديم الوحدة الخاصة بك بشكل صحيح. استخدام نص القهوة هو مسؤوليتك الخاصة. إذا كنت تستخدمها ، فيجب عليك تعريفها على أنها تبعية. إذا كنت لا توافق ، فقم بإزالة بيان يتطلب وخيار المترجم الذي ينص على 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 وما إلى ذلك).
التعليق الأكثر فائدة
dkfiresky واو ، هل توقعت مني حقًا إجبار عشرات الآلاف من المستخدمين على تنزيل برنامج نصي القهوة حتى لو لم يكونوا بحاجة إليه لمجرد أنك لست على استعداد لانتظار الحل المناسب؟ هذا محزن.
@ n-riesco في الواقع هذا مدعوم بالفعل. تكمن المشكلة في أن إسقاط الدعم لخيار
coffeescript
هو تغيير فاصل وأود تجربة حل أفضل أولاً (إن وجد).