Less.js: المحدد مفقود عند استخدام خرائط المصادر والمكونات الإضافية وتجميع ملفات أقل بالتوازي

تم إنشاؤها على ١٤ ديسمبر ٢٠٢٠  ·  29تعليقات  ·  مصدر: less/less.js

لدي بعض التعليمات البرمجية مثل القاع.

    @root-name: business-bundle
    /* other file */
    .@{root-name} .wrapper{
        /* css... */
    }

عندما تستخدم حزمة الويب 3.12.2 أقل ، فلا بأس بذلك. ولكن عند استخدام 3.13.0 ، حدث خطأ في إنشاء حزمة الويب.
image

bug medium priority research needed

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

PengJiyuankirazxyunJustineo وغيرها من فضلك حاول اختبار مع [email protected]

ال 29 كومينتر

TopGrd هذا لا يكفي حقًا lessc لتجميع رمز Less الخاص بك؟

وجود مشكلة مماثلة مع v3.13.0 - 3.12.2 تعمل معي أيضًا.

image

إنه مشروع ضخم ، يكاد يكون من المستحيل العثور عليه في الملف الأقل.

تضمين التغريدة

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

تضمين التغريدة

دليل واحد ، رمز أقل هذا غير صالح:

    @root-name: business-bundle
    /* other file */
    .@{root-name} .wrapper{
        /* css... */
    }

ينقص @root-name: business-bundle فاصلة منقوطة. لذلك قد يكون لديك بعض المكتبات الموضوعة فوق Less والتي تتوقع خطأً ، ولا تجد واحدة ، وتحاول المضي قدمًا وتحليل إخراج Less ، ولكنها تفشل مع هذا الخطأ "المحدد المفقود". هذا مجرد تخمين ، لأنه ليس لدي ريبو أنظر إليه.

أواجه مشكلة مماثلة في 3.13.0. (ما زلت أحاول معرفة الحد الأدنى من التكاثر.)

يبدو الرمز ذو الصلة مثل:

// button.less
<strong i="7">@import</strong> "./lib.less";

.@{prefix}-button {
  color: red;

  &:hover {
    color: blue;
  }
}
// lib.less
<strong i="10">@import</strong> "./vars"; // where <strong i="11">@prefix</strong> is defined

والتي يتم تجميعها على النحو التالي:

{
  color: red;
}

:hover {
  color: blue;
}

من الغريب أنه لم يحدث خطأ في التجميع.

@ Matthew-dean إنه مشروع ضخم للغاية حدث فيه خطأ. أحاول إعادة إنتاجه في عرض توضيحي

تضمين التغريدة

دليل واحد ، رمز أقل هذا غير صالح:

  @root-name: business-bundle
    /* other file */
  .@{root-name} .wrapper{
      /* css... */
  }

ينقص @root-name: business-bundle فاصلة منقوطة. لذلك قد يكون لديك بعض المكتبات الموضوعة فوق Less والتي تتوقع خطأً ، ولا تجد واحدة ، وتحاول المضي قدمًا وتحليل إخراج Less ، ولكنها تفشل مع هذا الخطأ "المحدد المفقود". هذا مجرد تخمين ، لأنه ليس لدي ريبو أنظر إليه.

@ اسم الجذر: حزمة الأعمال ؛ آسف ، هذا هو رمز بلدي. لها فاصلة منقوطة.

أواجه مشكلة مماثلة في 3.13.0. (ما زلت أحاول معرفة الحد الأدنى من التكاثر.)

يبدو الرمز ذو الصلة مثل:

// button.less
<strong i="8">@import</strong> "./lib.less";

.@{prefix}-button {
  color: red;

  &:hover {
    color: blue;
  }
}
// lib.less
<strong i="11">@plugin</strong> "~some-less-plugin"; // where <strong i="12">@prefix</strong> is injected which preprocessing plugins

والتي يتم تجميعها على النحو التالي:

{
  color: red;
}

:hover {
  color: blue;
}

من الغريب أنه لم يحدث خطأ في التجميع.

أستخدم محمل موارد النمط لإدخال بعض المتغيرات العالمية أيضًا. ربما له علاقة بذلك؟

{
  test: /\.less$/i,
  use: [
    {
      loader: MiniCssExtractPlugin.loader,
      options: {
        hmr: process.env.NODE_ENV === 'development',
        reloadAll: true,
      },
    },
    {
      loader: 'css-loader',
    },
    {
      loader: 'postcss-loader',
      options: {
        config: {
          path: path.resolve(__dirname, '../postcss.config.js'),
        },
      },
    },
    {
      loader: 'less-loader',
      options: {
        lessOptions: {
          javascriptEnabled: true,
          paths: [path.resolve(cwd, 'node_modules')],
        },
      },
    },
    {
      loader: 'style-resources-loader',
      options:{
            patterns: path.resolve(
              cwd,
              './node_modules/@somemodule/style/index.less',
            ),
            injector: 'prepend',
          },
    },
  ],
},

رمز بلدي:
image

المصحح less.render output: لا يوجد محدد
image

المتغير @{bundle-root-class} هو settingBundle . يبدو أن المتغيرات في السطر الأول لم يتم تجميعها؟

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

<strong i="6">@import</strong> "./lib.less";

.@{prefix}-button {
  val: @prefix;
}

يجمع إلى:

{
  val: foo;
}

(لاحظ أن المحدد بالكامل مفقود ، وليس الجزء المحرف فقط.)

تضمين التغريدة

يبدو أن الإخراج المترجم للملف الذي تم تغييره صحيح

هل يمكنك التوسع في هذا أكثر قليلاً؟ يبدو أن الإخراج المترجم من Less صحيح ، ولكن لا يتم استبداله بشكل صحيح؟

من الغريب جدًا أنه عند تشغيل استبدال الوحدة النمطية الساخنة ويبدو أن الإخراج المترجم للملف الذي تم تغييره صحيح.

Justineo هذا دليل مفيد. من المحتمل أن يكون مرتبطًا بهذا الحل: https://github.com/less/less.js/issues/3434

باختصار ، تمت إزالة التخزين المؤقت للأشجار من Less لبعض الوقت ، ولكن يبدو أنه كان له تأثير سلبي كبير على الأداء في بعض السيناريوهات ، لذلك أعدته مرة أخرى. قد يكون ذلك بسبب عدم قيام Less بإعادة تعيين بعض حالات استيراد الأشجار ، والذي يسبب فقط مشكلة في بيئة "حية" حيث يتم استدعاء less.parse عدة مرات. حسنًا ، أتساءل عما إذا كان بإمكاني اختبار هذه النظرية في التكاثر.

JustineoTopGrdendbay

لسوء الحظ ، ما زلت لا أستطيع إعادة إظهار هذه المشكلة ، لذا فهي غير قابلة للتصحيح. ☹️ إذا كان بمقدور شخص ما عمل إعادة شراء حيث يمكن استنساخه بسهولة ، فيمكنني المرور خلاله.

أواجه مشكلة مماثلة في 3.13.0. (ما زلت أحاول معرفة الحد الأدنى من التكاثر.)
يبدو الرمز ذو الصلة مثل:

// button.less
<strong i="9">@import</strong> "./lib.less";

.@{prefix}-button {
  color: red;

  &:hover {
    color: blue;
  }
}
// lib.less
<strong i="12">@plugin</strong> "~some-less-plugin"; // where <strong i="13">@prefix</strong> is injected which preprocessing plugins

والتي يتم تجميعها على النحو التالي:

{
  color: red;
}

:hover {
  color: blue;
}

من الغريب أنه لم يحدث خطأ في التجميع.

أستخدم محمل موارد النمط لإدخال بعض المتغيرات العالمية أيضًا. ربما له علاقة بذلك؟

{
  test: /\.less$/i,
  use: [
    {
      loader: MiniCssExtractPlugin.loader,
      options: {
        hmr: process.env.NODE_ENV === 'development',
        reloadAll: true,
      },
    },
    {
      loader: 'css-loader',
    },
    {
      loader: 'postcss-loader',
      options: {
        config: {
          path: path.resolve(__dirname, '../postcss.config.js'),
        },
      },
    },
    {
      loader: 'less-loader',
      options: {
        lessOptions: {
          javascriptEnabled: true,
          paths: [path.resolve(cwd, 'node_modules')],
        },
      },
    },
    {
      loader: 'style-resources-loader',
      options:{
            patterns: path.resolve(
              cwd,
              './node_modules/@somemodule/style/index.less',
            ),
            injector: 'prepend',
          },
    },
  ],
},

+1

سيؤدي أقل من

@ ماثيو دين 🙏

PengJiyuan هل يمكنك إنشاء مثال قابل للتكرار في الريبو القابل للاستنساخ؟

+1
image
أعتقد أن سبب المشكلة هو هذا الرمز. تحتوي عقدة الشجرة على معلومات خاطئة عن الملف في حالة التوازي ، مما يتسبب في أن مصدر الإدخال غير محدد.

+1
image
أعتقد أن سبب المشكلة هو هذا الرمز. تحتوي عقدة الشجرة على معلومات خاطئة عن الملف في حالة التوازي ، مما يتسبب في أن مصدر الإدخال غير محدد.

@ ماثيو دين انتظر لحظة ، نقوم بإنشاء ريبو صغير. لقد حددنا هذا السطر من التعليمات البرمجية ، ونأمل أن نساعدك في حله بسرعة ...

+1
image
أعتقد أن سبب المشكلة هو هذا الرمز. تحتوي عقدة الشجرة على معلومات خاطئة عن الملف في حالة التوازي ، مما يتسبب في أن مصدر الإدخال غير محدد.

ظهر هذا السطر من الكود منذ 3.10.0

PengJiyuan هل يمكنك إنشاء مثال قابل للتكرار في الريبو القابل للاستنساخ؟

https://github.com/kirazxyun/less-question

يمكن إعادة إنتاج هذا الريبو المشكلة. يمكنك تشغيل "npm run build" , ثم عرض النتائج في مجلد dist.

PengJiyuan هل يمكنك إنشاء مثال قابل للتكرار في الريبو القابل للاستنساخ؟

https://github.com/kirazxyun/less-question

يمكن إعادة إنتاج هذا الريبو المشكلة. يمكنك تشغيل "npm run build" , ثم عرض النتائج في مجلد dist.

@ ماثيو دين

@ Matthew-dean نستخدم plugin ويؤثر على جميع مشاريعنا ، الرجاء مساعدتنا 🙏

PengJiyuan أنت على حق ، يجب ألا تفشل الكود المعني في إخراج القطعة إذا لم يعمل بناء خريطة المصدر. يجب أن يكون مثل:

                if (inputSource === undefined) {
                    this._css.push(chunk);
                    return;
                }

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

لذلك يمكنني أن أفعل الحل المؤقت للإسعافات الأولية قريبًا ، ومعرفة السبب بعد ذلك.

PengJiyuankirazxyunJustineo وغيرها من فضلك حاول اختبار مع [email protected]

تم حل المشكلة باستخدام [email protected]. شكرا لك مات!

@ ماثيو دين يعمل ، شكرا 🙏

@ Matthew-dean أكد أن المشكلة قد تم حلها باستخدام [email protected] ، على أمل إصدار رسمي قريبًا

يتم حلها باستخدام [email protected].

3.13.1 تم نشره

تم نشر 4.0.0 أيضًا ، والذي يحتوي على هذا الإصلاح.

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