Less.js: كسر في العقدة v6.0.0

تم إنشاؤها على ٢٧ أبريل ٢٠١٦  ·  41تعليقات  ·  مصدر: less/less.js

ادارة

lessc main.less build.css

لن ينتج أي خطأ ولا ملف بناء.

يعمل باستخدام nodemon يعطي مزيدًا من المعلومات:

› nodemon -e less --exec 'lessc src/main.less build.css'
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.

==== JS stack trace =========================================

Security context: 0x36610d2c9fa9 <JS Object>#0#
    1: .node [module.js:568] [pc=0x1aa0081d0f64] (this=0x225da61d89b9 <an Object with map 0x7af7e117be1>#1#,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    2: load [module.js:456] [pc=0x1aa008138e72] (this=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    3: tryModuleLoad(aka tryModuleLoad) [module.js:415] [pc=0x1aa00813899d] (this=0x36610d204189 <undefined>,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_mo 1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
 2: fse::FSEvents::Initialize(v8::Local<v8::Object>)
 3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
 4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
 5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
 6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
 7: 0x1aa00800961b
 8: 0x1aa0081d0f64
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.

==== JS stack trace =========================================

Security context: 0x36610d2c9fa9 <JS Object>#0#
    1: .node [module.js:568] [pc=0x1aa0081d0f64] (this=0x225da61d89b9 <an Object with map 0x7af7e117be1>#1#,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    2: load [module.js:456] [pc=0x1aa008138e72] (this=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node>)
    3: tryModuleLoad(aka tryModuleLoad) [module.js:415] [pc=0x1aa00813899d] (this=0x36610d204189 <undefined>,module=0x2666c00042f1 <a Module with map 0x7af7e1181b9>#2#,filename=0x2666c0004251 <String[136]: /Users/zigomir/.nvm/versions/node/v6.0.0/lib/node_modules/nodemon/node_mo 1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
 2: fse::FSEvents::Initialize(v8::Local<v8::Object>)
 3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
 4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
 5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
 6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
 7: 0x1aa00800961b
 8: 0x1aa0081d0f64
needs decision needs info

التعليق الأكثر فائدة

رؤية نفس الشيء. يؤدي تشغيل lessc على أي ملف .less تافه إلى عدم وجود ملف بناء ولا توجد أخطاء ضمن Node.js v6 ، حتى في الوضع المطول.

ال 41 كومينتر

لا تستخدم Less نفسها أي دالة ObjectTemplate.Set ، لذا فهي على الأرجح إحدى تبعياتها. هناك سلسلة طويلة من تحديثات التبعية في الإصدار الرئيسي الحالي ، لذا من الصعب معرفة مدى صعوبة الحصول على إصدار متوافق مع v6 . لا تتردد في التحقيق في الأمر بنفسك بشكل أعمق واقترح تصحيحًا / علاقات عامة.

يبدو أن هذه مشكلة مع nodemon ، وليس أقل

رؤية نفس الشيء. يؤدي تشغيل lessc على أي ملف .less تافه إلى عدم وجود ملف بناء ولا توجد أخطاء ضمن Node.js v6 ، حتى في الوضع المطول.

لقد وجدت السبب:

الإصدار الحالي المنشور من Less calls path.dirname() مع undefined مما يؤدي إلى حدوث خطأ في العقدة v6. تمت معالجة هذا بالفعل بواسطة ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 ولكن لم يتم نشره بعد. لم يتم طرح الخطأ لأن التنفيذ الحالي لـ lessc يبتلع جميع الأخطاء التي تسببها Less نفسه. لقد قمت بإنشاء علاقات عامة لإصلاح هذا.

إذن ، إيم ، أي واحد يدمج؟ # 2882 أو # 2884؟ :)

قاموا بإصلاح مشكلتين مختلفتين IMO

كلاهما؟ (أنا أسأل لأنهما يتداخلان إلى حد ما وسيحتاج دمجهما إلى بعض التحرير الإضافي).

الآخر يستخدم process.exit() مباشرة ، والذي يجب تجنبه لمنع عدم مسح stdout / stderr

evanlucas هل يمكنك وصف كيف يمكن إعادة إنتاج هذه المشكلة عند استدعاء process.exit() مباشرةً؟ أنا أتفق معك بالتأكيد على أنه يجب استخدام process.exit() في حالات نادرة لأنه عادةً ما يكون من الأفضل إنهاؤه بانتظام أو عن طريق الخطأ. ومع ذلك ، في هذه الحالة ، أعتقد أن process.exit() برمز خطأ أكثر ملاءمة ، لأننا لا نريد إظهار تتبع مكدس للأخطاء المتوقعة. ويبدو أيضًا أنه من الغريب بالنسبة لي الاستمرار في التنفيذ ولكن مع منع المعالجة الإضافية بعلامة (كما هو مطبق حاليًا).

إعداد process.exitCode لا يُظهر تتبع المكدس. لا يقوم process.exit() بالفعل بمسح process.stdout أو process.stderr (وكلاهما غير محظور). يجب عليك فقط الاتصال به صراحة في حالات نادرة. خلاف ذلك ، أغلق كل المقابض الخاصة بك وسيتم إغلاق حلقة الحدث من تلقاء نفسها ، مما سيؤدي إلى إنهاء العملية.

ذات صلة: https://github.com/nodejs/node/issues/6409

شكرا لتوضيح هذا. لم أكن أعلم أن process.exit() غير محظور. سأقوم بتحديث العلاقات العامة الخاصة بي في أسرع وقت ممكن.

هناك شيء واحد: إذا لم يقم process.exit() بتدفق process.stdout - لماذا يوجد ناتج في وحدة التحكم الخاصة بي؟ :ابتسامة:

من الممكن أن يكون قد تم مسحه بالفعل بحلول وقت إغلاق الدفق. إنه ليس مجرد ضمان. هذا هو السبب في وجود إخراج (جزئي) في بعض الأحيان في وحدة التحكم.

أكد أنه ، على الأقل بالنسبة لنا ، يتم حل هذه المشكلة بشكل رئيسي (والذي يتضمن https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932).

لا يزال استخدام "--source-map" يُنشئ ملف css فارغًا لي .. (يعمل بخلاف ذلك لديّ). node.js v6.0.0 على windows 8 64 بت.

ewebdev نعم ، يمكنني تأكيد ذلك. مع # 2891 ، ترمي:

lessc --source-map-map-inline styles/main.less
path.js:7
    throw new TypeError('Path must be a string. Received ' + inspect(path));
    ^

TypeError: Path must be a string. Received undefined
    at assertPath (path.js:7:11)
    at Object.basename (path.js:1355:5)
    at /Users/jhnns/dev/jhnns/less.js/bin/lessc:292:61
    at Object.<anonymous> (/Users/jhnns/dev/jhnns/less.js/bin/lessc:486:3)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
    at Function.Module._load (module.js:407:3)
    at Function.Module.runMain (module.js:575:10)

سأكون على ما يرام لفتح العلاقات العامة التي تعمل على إصلاح هذا ، لكنني لست متأكدًا من خيارات خريطة المصدر المدعومة في أي المواقف ، على سبيل المثال عندما يكون الناتج process.stdout . هذا الرمز معقد بعض الشيء وربما يتطلب بعض إعادة البناء ...

تأكد ، هذا فاصل مع العقدة 6. لا يوجد خطأ ناتج :(

هل ما زلنا ننتظر العلاقات العامة لإصلاح هذا؟

AFAICT ، تم إصلاح ذلك رأسًا على عقب ، لذا في انتظار نشر حزمة npm ..

(يجب على الآخرين تأكيد ذلك).

lmeyerov أنا لا أرى ذلك في الالتزامات. و PRs # 2882 أو # 2884 مرتبطان ، لكن لا أحد يقول أنه إصلاح للعقدة 6. لذا ، على حد علمي ، العلاقات العامة غير موجودة حتى الآن على الرغم من أن jhnns وجدت السبب؟ أو ، هل يعمل أحد هذه العلاقات العامة على إصلاح توافق Node 6 ولكنه يقدم أخطاء أخرى (خريطة المصدر) لم يتم إصلاحها بعد؟ هل يمكن لأحد أن يوضح هذا؟

@ Matthew-dean بالنسبة إلى المشكلة التي ظهرت على السطح على أنها lessc لا تصدر أي شيء ، أعتقد أنه تم حلها. https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 . شيء ما بين الإصدار المنشور حاليًا على npm والخط الرئيسي في 22 أبريل تم حله لنا.

@ ماثيو دين باستخدام ec04a03f1cba3a092d5cd7f7c5d8e28bb43c193 يعمل بالنسبة لي (رأيته في مكان ما هنا).

lmeyerov @ Matthew-dean _source map_ لا يزال محبطًا بالنسبة لي ، سواء على الرأس أو على https://github.com/less/less.js/commit/ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 = /

راجع للشغل ، حتى بدون الإبلاغ عن إصلاحات الأخطاء ، يجب ألا يكون هناك ما يمنع إصدار إصدار يحتوي على تصحيح ec04a03 الخاص بي ، بحيث يعمل lessc على الأقل على Node.js v6 كما كان يفعل من قبل.

addaleax يتم إصدار أقل 2.7.0 (الآن). ما هي البق التي لا تزال معلقة؟ يجب أن أضيف هذا "خطأ معروف" إلى هذا الإصدار.

هذا هو الوحيد الذي واجهته _I_ ، بالإضافة إلى "الخطأ" المتمثل في عدم وجود أي ناتج خطأ حقيقي في حالة الفشل. لا أستطيع التحدث عن الآخرين ، رغم ذلك.

لسبب ما ، تجتاز خرائط المصدر جميع الاختبارات الأقل ، ولكن بعد الترقية ، أتلقى أيضًا خطأ خريطة المصدر ، وليس في بيئة Node 6.0. (يحدث في العقدة 4.) إذن هناك بعض التغيير الذي أدى للتو إلى كسر خرائط المصدر.

أعتقد أن PR # 2834 قدم خطأ خريطة المصدر. أدى الرجوع إلى الالتزام 470af20 على نظامي إلى إصلاح مشكلة خريطة المصدر الخاصة بي. هل يستطيع شخص ما (ewebdev) التأكيد بسرعة؟ إذا كان الأمر كذلك ، فسوف ألتزم بالعودة وأضع إصلاحًا جديدًا 2.7.1.

// سم مكعب @ نيكس

@ Matthew-dean العودة إلى الالتزام https://github.com/less/less.js/commit/470af20f641c9b5389475733dfe341aa4c180fba لا يحل مشكلة خرائط المصدر على بيدي.

@ ماثيو دين آسف! إنه مجرد تحسين للأداء ، فلا تتردد في التراجع إذا تسبب في حدوث مشكلات ويمكننا المحاولة مرة أخرى لاحقًا

الكثير من اللبس ... 😁

نظرًا لأنني خصصت بعض الوقت بالفعل للتحقيق ، دعني أوضح ذلك:

  • ec04a03f1cba3a092d5cd7f7c5d8e28bb43c1932 يعمل على إصلاح الخلل في bin/lessc حيث تم تمرير مسار غير محدد إلى dirname . تم نشر هذا الآن ، كل شيء على ما يرام
  • لا يزال هناك خطأ في bin/lessc ، حيث يتم تمرير مسار غير محدد إلى basename . ما عليك سوى تشغيل lessc --source-map-map-inline some-file.less وستنبعث أقل من أي شيء غريبًا. لا توجد علاقات عامة لهذا الخطأ حتى الآن. لقد حاولت إصلاح هذا ، ولكن نظرًا لعدم وجود اختبارات لـ lessc وهناك العديد من الخيارات المختلفة ، لم أكن واثقًا بما يكفي لعدم كسر أي شيء آخر ... 😞
  • لم يتم الإبلاغ عن كلا الخطأين للمستخدم (على سبيل المثال ، تقديم تتبع مكدس أو رمز خروج غير صفري). تم إصلاح هذا من خلال بلدي العلاقات العامة التي لا تزال معلقة.

jhnns أوه ، رائع ، لم أر خريطة المصدر واحدة.

إذا لم يكن هناك شيء آخر ، فيمكن للمرء _ استعادة_ سلوك Node v5 القديم عن طريق تغيير path.basename(output) إلى path.basename(output || 'undefined'); … أعتقد أنه يمكن تخطي الكتلة بأكملها هناك مقابل output === undefined ، بالرغم من ذلك.

jhnns ما هو تأثير الخطأ في bin/lessc . هل هو خطأ حرج؟ هل ما زال أقل مكتملًا؟ ما هي النتيجة؟ هل يمكنك تقديم مشكلة معينة لهذا الخطأ بمزيد من التفاصيل؟

لقد دمجت العلاقات العامة الخاصة بك للإبلاغ عن الخطأ.

@ ماثيو دين انظر https://github.com/less/less.js/issues/2896

[عدل: نيفير مايند ، شكرًا @ ماثيو دين]

ewebdev إذا كنت لا تزال تواجه مشكلة في أقل 2.7.1 ، فهل يمكنك تقديم مشكلة منفصلة بمزيد من التفاصيل؟

claar هذه مشكلة منفصلة (الأولى في قائمة jhnns ) ، وقد تمت معالجتها. العنصر الثاني هو خطأ منفصل ، و ewebdev هو خطأ منفصل. يجب فصلهم عن هذه القضية من أجل الوضوح.

@ نيكس يحدث ذلك. لن تكون الأول. إذا كان بإمكانك مساعدتنا في إضافة اختبارات حتى نتمكن من اكتشاف خرائط المصدر التي لا تعمل في المستقبل ، فسيكون ذلك محل تقدير كبير.

راجع للشغل ، كمعلومات عامة ، فإن دعم Less's dev ضعيف بعض الشيء في الوقت الحالي (كان على أحد المساهمين الرئيسيين التراجع بسبب المسؤوليات العائلية) ، لذلك نرحب بالتأكيد بمطورين أقل يشاركون على المستوى التنظيمي. يمكنك الاتصال بي بشكل منفصل إذا كان لديك أسئلة.

لقد قمت بإنشاء مشكلة منفصلة. نظرًا لأنه تم حل المشكلة الأصلية ، يمكننا إغلاق هذه المشكلة.

jhnns تبدو جيدة. شكرا للمتابعة.

لا يزال مكسورًا على العقدة v6.9.2 LTS.
Nothings يحدث عند تشغيل lessc

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات