Less.js: الاستخدام البرمجي للمحلل اللغوي

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

أهلا!
أنا أعمل على محول less2sass لأطروحة البكالوريوس الخاصة بي ، ومن المفترض أن يصبح لاحقًا محول sass2less أيضًا. أنا أبحث عن طريقة للحصول على AST من مشروع أقل. لقد قمت بتجربة الكود التالي:

var parser = new(less.Parser)({}, {contents: {}}, {});
var contents = ".foo {\
  background: #900;\
}\
<strong i="7">@import</strong> \"import/this-is-valid.less\";";
parser.parse(contents, function (e, tree) {
   console.log(JSON.stringify(tree, null, 2));
});

أحصل على AST مرة أخرى ، إلا إذا لم أحاول استيراد ملف أقل. ما فهمته من الكود هو أن المحلل اللغوي يجب أن يحصل على معلمة مع الواردات المستخدمة ، والتي تم إنشاؤها بواسطة importManager ، والتي تحتاج إلى السياق كمعامل ، وما إلى ذلك. هل يمكنني الحصول على تلميح حول كيفية الحصول على AST من أقل المشروع ، إذا كنت أعرف ملف المصدر الخاص به؟

needs info

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

شكرا يا رفاق. تم حل المشكلة :) أنا أضع الكود الفعلي هنا ، والذي يعمل على الحصول على AST ، في حال واجه شخص ما نفس العقبة وواجه هذه المشكلة.

var less = require('less')
  , fs = require('fs')
  , path = require('path');

var src = './test_import.less'; //some less source file
var result = less.parse(fs.readFileSync(src).toString(), {
  filename: path.resolve(src)
}, function(e, tree) {
  console.log(JSON.stringify(tree, null, 2));
});

ال 5 كومينتر

هل هذا يساعدك؟ https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js

تمكنت من الحصول على شجرة AST التي تم تقييمها بهذه الطريقة ، وأعتقد أن الشجرة المقيمة تحتوي على مرجع للشجرة التي لم يتم تقييمها.

أحصل على AST مرة أخرى ، إلا إذا لم أحاول استيراد ملف أقل.

يجب ألا يكون هناك فرق في الواردات ، فقط تأكد من عدم تفويت:

ثم قم بتعيين حقل اسم الملف على الخيارات ليكون اسم الملف للملف الرئيسي. أقل سوف تتعامل مع جميع عمليات معالجة الواردات.

في الاستخدام الآلي (مزيد من التفاصيل في https://github.com/less/less.js/issues/2342#issuecomment-67596931).

أن المحلل اللغوي يجب أن يحصل على معلمة مع الواردات المستخدمة ، والتي تم إنشاؤها بواسطة importManager ، والتي تحتاج إلى السياق كمعامل ، إلخ.

ليس صحيحا. يعد importManager (تقريبًا) جزءًا من المحلل اللغوي ويتم التعامل مع جميع الواردات (عادةً) داخل المحلل اللغوي نفسه.

شكرا يا رفاق. تم حل المشكلة :) أنا أضع الكود الفعلي هنا ، والذي يعمل على الحصول على AST ، في حال واجه شخص ما نفس العقبة وواجه هذه المشكلة.

var less = require('less')
  , fs = require('fs')
  , path = require('path');

var src = './test_import.less'; //some less source file
var result = less.parse(fs.readFileSync(src).toString(), {
  filename: path.resolve(src)
}, function(e, tree) {
  console.log(JSON.stringify(tree, null, 2));
});

هل من الممكن أن تقدم وظيفة التحليل خيارًا يتجاهل الانحراف؟ في حالتي ، لدي بعض القواعد الخاصة لمسارات الاستيراد ، لذلك لن يتم تكييف عملية الاستيراد الداخلي لـ less.js. هل يمكننا فقط تحليل السلسلة إلى AST دون أي تقييم؟

لقد قرأت للتو الكود المصدري ووجدت أنه يمكنني تمرير { processImports: false } لتعطيل عملية الاستيراد ، فهي تعمل بالنسبة لي :)

less.parse(content, { processImports: false }, (e, tree) => {
  if (e) { return console.error(e) };
  return console.log(tree);
})

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

القضايا ذات الصلة

chricken picture chricken  ·  6تعليقات

briandipalma picture briandipalma  ·  6تعليقات

renoth picture renoth  ·  6تعليقات

BrianMulhall picture BrianMulhall  ·  4تعليقات

pknepper picture pknepper  ·  3تعليقات