Rollup-plugin-typescript2: لا يعمل مع البرنامج المساعد الذي يحتوي على بناء الجملة غير المتزامن / في انتظار

تم إنشاؤها على ١٤ أغسطس ٢٠١٨  ·  15تعليقات  ·  مصدر: ezolenko/rollup-plugin-typescript2

ماذا يحدث ولماذا هو خطأ

لا يعمل هذا المكون الإضافي مع المكون الإضافي الذي يحتوي على بناء جملة غير متزامن / انتظار ناتج عن مشكلة تجزئة الكائن و tscache.ts . أعتقد أنه من الصعب إصلاح تجزئة الكائن لأنه لا توجد طريقة لاكتشاف وظيفة غير متزامنة الآن. فهل هناك بديل بدون تجزئة الكائن؟

بيئة

إصدارات

  • مطبوعة: 2.8.3
  • تراكمي: 2.1.1
  • البرنامج المساعد التراكمي typecript2: 0.14.0

rollup.config.js

import svgr from '@svgr/rollup';
import typescript from 'rollup-plugin-typescript2';

export default {
  ...
  plugins: [
    replace({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }),
    svgr(),
    typescript({
      useTsconfigDeclarationDir: true,
    })
  ],
  ...
};

tsconfig.json

لا يوجد صلة بالموضوع.

package.json

لا يوجد صلة بالموضوع.

إخراج البرنامج المساعد مع الإسهاب 3

[!] (rpt2 plugin) Error: Unknown object type "asyncfunction"
src/components/atoms/Icon/index.ts
Error: Unknown object type "asyncfunction"
    at Object._object (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:218:17)
    at Object._function (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:319:14)
    at Object.dispatch (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:185:30)
    at /Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:246:18
    at Array.forEach (<anonymous>)
    at Object._object (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:242:21)
    at Object.dispatch (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:185:30)
    at /Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:260:23
    at Array.forEach (<anonymous>)
    at Object._array (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:259:20)

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

يجب أن أعترف أنني مندهش من أن هذا لم يكن يمثل مشكلة حتى الآن لأن الوظائف غير المتزامنة شائعة للغاية الآن 😀. وهذا هو السبب أيضًا في أنني أعتقد أن تجاهلها ببساطة سيؤدي إلى قدر كبير من مشكلات ذاكرة التخزين المؤقت. كان PR الذي قدمته إلى تجزئة الكائن منذ بعض الوقت نتيجة لهذه المشكلة بالذات ، وأود أن أقترح عليك إزالة التبعية على تجزئة الكائن. أنا على ثقة تامة من أن PR الذي تم إرساله منذ بعض الوقت سيعمل بشكل جيد لأنه يتطابق مع نفس القيمة الموضحة في رسالة الخطأ واجتاز كلا من اختبارات الوحدة وحل المشكلات في هذا المكون الإضافي ، لذلك لا تتردد في الاعتماد على العلاقات العامة بدلاً من حزمة NPM هنا.

vwxyutarooo ، الحل الفوري هو تعيين clean: true في التكوين لتجاوز ذاكرة التخزين المؤقت تمامًا. بدلاً من ذلك (آسف للمقبس) قمت ببناء https://github.com/wessberg/rollup-plugin-ts والذي سيعمل أيضًا بشكل جيد

ال 15 كومينتر

أضفت حلاً لتجاهل أي شيء لا تستطيع تجزئة الكائن معالجته (انظر فرع objecthash ، objectHashIgnoreUnknownHack option). هذا يمكن أن يجعل ذاكرة التخزين المؤقت قديمة ، لذلك ليس حلاً جيدًا على المدى الطويل.

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

يجب أن أعترف أنني مندهش من أن هذا لم يكن يمثل مشكلة حتى الآن لأن الوظائف غير المتزامنة شائعة للغاية الآن 😀. وهذا هو السبب أيضًا في أنني أعتقد أن تجاهلها ببساطة سيؤدي إلى قدر كبير من مشكلات ذاكرة التخزين المؤقت. كان PR الذي قدمته إلى تجزئة الكائن منذ بعض الوقت نتيجة لهذه المشكلة بالذات ، وأود أن أقترح عليك إزالة التبعية على تجزئة الكائن. أنا على ثقة تامة من أن PR الذي تم إرساله منذ بعض الوقت سيعمل بشكل جيد لأنه يتطابق مع نفس القيمة الموضحة في رسالة الخطأ واجتاز كلا من اختبارات الوحدة وحل المشكلات في هذا المكون الإضافي ، لذلك لا تتردد في الاعتماد على العلاقات العامة بدلاً من حزمة NPM هنا.

vwxyutarooo ، الحل الفوري هو تعيين clean: true في التكوين لتجاوز ذاكرة التخزين المؤقت تمامًا. بدلاً من ذلك (آسف للمقبس) قمت ببناء https://github.com/wessberg/rollup-plugin-ts والذي سيعمل أيضًا بشكل جيد

wessberg نعم ، أعتقد أنه لا يوجد العديد من الإضافات التراكمية غير

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

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

حسنًا ، يمكنك تطبيق sha1 على نتيجة JSON.stringify على التكوين بالكامل باستخدام بديل مخصص يقوم بتعيين المكونات الإضافية إلى خاصية name التي أنا متأكد من أنها مطلوبة.
على سبيل المثال ، التكوين التراكمي التالي:

{
  // ...
  treeshake: true,
  plugins: [
    myPlugin1(),
    myPlugin2()
  ],
  // ...
}

يمكن تحويلها إلى تمثيل JSON التالي:

{
  "treeshake": true,
  "plugins": [
    "name-of-my-plugin-1",
    "name-of-my-plugin-2"
  ]
}

وبعد ذلك يمكنك تطبيق sha1 والحصول على سلسلة base64 أو شيء من هذا القبيل يمكنك استخدامه كمفتاح ذاكرة التخزين المؤقت؟

كنت أفكر على هذا المنوال ، لكن ألن يؤدي ذلك إلى إزالة المزيد من الأشياء من النظر في ذاكرة التخزين المؤقت؟ أظن أن object-hash تم إنشاؤه على وجه التحديد لأن JSON.stringify يتخلص من أي شيء ليس خاصية أو مصفوفة أو قاموسًا ليس به قيمة عادية - لا يوجد شيء آخر في مواصفات json.

أفترض أنه يمكنني دمج تجزئة package-lock,json وما يعادله من الغزل ، إذا كانت هناك طريقة موثوقة للعثور عليها. (للتخفيف من تأثير الخيار objectHashIgnoreUnknownHack )

شكرا يا رفاق مناقشة حول هذه المسألة. في الواقع ، لا تتجاوز جرعة الخيار clean: true عملية ذاكرة التخزين المؤقت ، لذا فهي لا تعمل حتى لبعض الوقت. ومع ذلك ، قد يكون ignoreUnknown الطريقة المناسبة لإصلاح هذه المشكلة كما يقول ezolenko . سأنتظر 0.16.2 على أي حال!

vwxyutarooo ، كنت clean: true يستخدم إستراتيجية noop cache. هذا ما أتذكره أن ezolenko تم تنفيذه منذ بعض الوقت. إذا كان لا يزال يحاول حساب مفتاح ذاكرة التخزين المؤقت من تكوين التراكمية ، فإن هذا السلوك يحتاج إلى النظر فيه في رأيي

لا أعرف كيف أثر ذلك على نتيجة تجزئة الكائن ، ولكن الخيار objectHashIgnoreUnknownHack في الفرع objecthash يناسبني.

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

في 0.17.0 الآن

لحل آخر لا يستخدم الاختراق objectHashIgnoreUnknownHack ، واجهت هذه المشكلة باستخدام rollup-plugin-require-context ، ويبدو أن المقتطف التالي يعمل:

import requireContextORIGINAL from 'rollup-plugin-require-context'

const requireContext = (options) => {
  const plugin = requireContextORIGINAL(options)
  return {
    name: plugin.name,
    transform(code, id) {
      return plugin.transform(code, id)
    }
  }
}

وبالتحديد ، جعل transform وظيفة عادية تعيد الوعد.

اعتقدت أنني سأضيف تحديثًا للأشخاص هنا أن السبب الجذري هنا قد تم إصلاحه أخيرًا في https://github.com/puleos/object-hash/pull/90 (مشابه جدًا لـ https://github.com/puleos/ تجزئة الكائن / السحب / 68 المشار إليه أعلاه) وهنا في رقم 203. لا حاجة لاستخدام objectHashIgnoreUnknownHack لدعم المكونات الإضافية غير المتزامنة ولا مزيد من مشكلات ذاكرة التخزين المؤقت - تم إصداره للتو كـ v0.26.0 🎉 😄

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