Tslint: خارطة الطريق: TSLint -> ESLint

تم إنشاؤها على ٢٣ فبراير ٢٠١٩  ·  52تعليقات  ·  مصدر: palantir/tslint

كما قرأت في منشور المدونة هذا ، فإننا نخطط لإيقاف TSLint في عام 2019 ودعم الترحيل إلى ESLint باعتباره linter القياسي لكل من TypeScript و JavaScript. لن يكون هذا إهمالًا فوريًا ؛ على العكس من ذلك ، هناك الكثير من العمل الذي يتعين القيام به لضمان الانتقال السلس إلى الأدوات الجديدة دون أي تراجع. هناك ميزات ومجموعات اختبار ووسائل راحة في TSLint نأمل الاحتفاظ بها في الترحيل. قد تكون هناك فترة من الوقت عندما يكون هناك تداخل بين الأداتين ويوصى بمتبني TSLint الأوائل لتشغيل كلاهما لضمان تغطية كاملة لفحص الكود (بدرجة معقولة بحيث لا يتأثر الأداء بشكل كبير).

سأغلق بعض طلبات الميزات في هذا الريبو والتي تبدو الآن خارج النطاق لأننا نتوقع أن يتم التعامل معها في خريطة طريق ESLint / printcript-eslint . أحد الأمثلة على فئة القواعد التي من المرجح أن يتم إغلاق / رفض __طلبات الميزات الجديدة__ بالنسبة لها ، هي قواعد التنسيق . لقد اقترحت تقسيم هذه القواعد لبعض الوقت لأننا نستخدم Prettier في Palantir ونعتبرها أداة أفضل لمهمة تنسيق التعليمات البرمجية.

سيستمر إصدار TSLint مع إصلاحات الأخطاء المهمة والتحديثات التي تجعله محدثًا بأحدث ميزات المترجم / اللغة.


تحديث (يونيو 2019): جدول زمني أكثر واقعية لخارطة الطريق ، بالتنسيق مع JoshuaKGoldberg و tslint-contrib-microsoft:

  • __أول أغسطس 2019__: التوقف عن قبول قواعد _core_ الجديدة. لا تزال تقبل إصلاحات الأخطاء والميزات الثانوية وتحسينات القواعد. تعد القواعد المخصصة دائمًا خيارًا ويمكن الاحتفاظ بها خارج هذا الريبو.
  • __ 1 تشرين الأول (نوفمبر) 2019__: التوقف عن قبول الميزات أو تحسينات القواعد (باستثناء تلك التي تجعل الترحيل إلى printcript-eslint أسهل). لا تزال تقبل إصلاحات الشوائب.
  • __ 1 كانون الثاني (يناير) 2020__: التوقف عن قبول أي شيء باستثناء إصلاحات الأمان وإصلاحات الأعطال التي تحدث عن طريق كسر تغييرات TypeScript.
  • __الأول من كانون الأول (ديسمبر) 2020__: توقف عن قبول أي رسائل PR 🎉

التحديث (أغسطس 2019): راجع tslint-to-eslint-config للحصول على أمر CLI يقوم بترحيل ملفات تكوين TSLint إلى ملفات تكوين ESLint.


تحديث (مارس 2020): تمت إضافة _ "وإصلاحات للأعطال الناتجة عن كسر تغييرات TypeScript" _ إلى الموعد النهائي في الأول من يناير ، بعد المناقشة في # 4914.

Documentation

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

سيكون من الرائع أن يكون لدي أمر CLI يقوم بترحيل tslint.json إلى eslint.json ، مع تعيين القواعد والخيارات المكافئة. من الناحية المثالية ، ستزيل القواعد التي يمكن ترحيلها من tslint.json والاحتفاظ بالقواعد التي ليس لها معادل حتى الآن (أو لا تدعم الخيارات المستخدمة) ، بحيث يمكن تشغيل القاعدة بشكل غير فعال بشكل متكرر بمرور الوقت حتى يصبح tslint.json فارغًا في مرحلة ما ويمكننا الاعتماد بشكل كامل على ESLint.

ال 52 كومينتر

سيكون من الرائع أن يكون لدي أمر CLI يقوم بترحيل tslint.json إلى eslint.json ، مع تعيين القواعد والخيارات المكافئة. من الناحية المثالية ، ستزيل القواعد التي يمكن ترحيلها من tslint.json والاحتفاظ بالقواعد التي ليس لها معادل حتى الآن (أو لا تدعم الخيارات المستخدمة) ، بحيث يمكن تشغيل القاعدة بشكل غير فعال بشكل متكرر بمرور الوقت حتى يصبح tslint.json فارغًا في مرحلة ما ويمكننا الاعتماد بشكل كامل على ESLint.

أخبار جيدة.
بدأ شباب ESLint بالفعل مشروع print-eslint من أجل دعم TS.
هم أيضا يبحثون عن المساعدة. هنا البيان. .

ماذا ستعني كتابة قواعد tslint بعد الهجرة؟

هل هناك خطة لترحيل eslint من JS إلى TS؟ أكره أن أقول ذلك ، لكن إذا لم يتم ترحيل eslint إلى ts ، فلن يكون من الجيد كتابة القواعد.

سيئتي ، إنها ليست eslint التي سنستخدمها ، سنستخدم print-eslint ، أكثر منطقية. اسمحوا لي أن أعرف إذا كان بإمكاني تقديم أي مساعدة.

هل من الممكن الرجوع إلى هذه الخطة لإهمالها من readme.md في الريبو؟ يبدو أن بعض الأشخاص فقط يعرفون عن هذه الخطة وليست معرفة عامة. شكرا!

@ joeyj-msft بالفعل ، تمت إضافته في a395501739bf7f0f166e5b0ccb355c0e9500445a بواسطة adidahiya.

سيكون من الجيد أن يكون لديك بعض "خلاصة" قواعد TSLint (https://palantir.github.io/tslint/rules/) متوفرة في typescript-eslint . لا أعرف ما إذا كان يجب أن يكون علامة "ESLint" على palantir أو قائمة جديدة على https://github.com/typescript-eslint/typescript-eslint. لكنه سيساعد في تحديد ما إذا كان المشروع جاهزًا للتحرك أم لا.

JoshuaKGoldberg أنا أتحول من tslint إلى print-eslint. كنت أستخدم TSLint لإنشاء قواعد مخصصة لمشروعي. كيف يمكنني متابعة إنشاء قواعد مخصصة كما فعلنا في TSLint؟

يقوم مشروعي بإنشاء Javascript بالإضافة إلى ملفات Typescript ، لذا يتعين علي إنشاء قاعدة واحدة فقط لهم؟

moulikcipherX شكرًا على طرح الأسئلة الرائعة!

يمكنك استخدام قواعد TSLint الخاصة بك داخل ESLint باستخدام typecript-eslint /pack / eslint-plugin-tslint . إنه يلتف على تكوين TSLint وينسق الكود الخاص بك باستخدام TSLint.

لكتابة القواعد في ESLint ، راجع typecript-eslint /packs / eslint-plugin . يحتوي هذا الملف README.md على قائمة بجميع القواعد المدعومة _ (القائمة أصبحت كبيرة جدًا!) _. يحتوي ROADMAP.md هناك على تعيين لقواعد TSLint الحالية للمكافئات الجديدة.

شكرا لكJoshuaKGoldberg.

لذلك يمكنني استخدام نفس الأساليب لإنشاء قواعد مخصصة لـ TypeScript كما في TSLint.

ملاحظة: لقد قمت للتو بتحديث المنشور الأصلي في هذا الموضوع مع مخطط زمني أكثر واقعية لخارطة الطريق. قم بالتمرير إلى أعلى هذه الصفحة لرؤيتها.

إيه ، لا يجب أن يكون منشور المدونة أيضًا في https://github.com/palantir/tslint/tree/gh-pages/_posts ، ومرتبطًا من https://github.com/palantir/tslint/blob/master/ README.md ؟

SamB المدونة في موقع gh-pages قديمة جدًا ، ولم نقم بتحديثها. ويتم ربط منشور المدونة في الجزء العلوي من README.

تضمين التغريدة
أرغب في المساهمة في مشروع print-eslint ، فمن أين أبدأ؟

هل سيتم دعم التحويل المكافئ من قواعد tslint المخصصة إلى قواعد eslint المخصصة في المستقبل typescript-supported-eslint ؟

ما أحاول قوله هو وجود أمر CLI معين لتحويل ملفات JS الخاصة بقاعدة tslint-rule المخصصة إلى قواعد فحص متوافقة مع eslint. سيساعد ذلك كثيرًا في إعادة تطبيق قاعدة tslint على eslint وستكون مهمة صعبة حقًا ...

@ a20185 ، نعم ، هذا موجود الآن! https://github.com/typescript-eslint/tslint-to-eslint-config

نشكرك على إنشاء هذه الأداة الرائعة ، وأتمنى لك كل التوفيق في مغامراتك المستقبلية. بالحديث عن المغامرات ، كانت هذه بالتأكيد واحدة ، أليس كذلك؟

على أي حال ، كل التوفيق لك ،
إرادة

نظرًا لأننا نقترب من نهاية عام 2019 (العام الذي كان من المفترض أن يتم فيه إهمال الريبو هذا) ، فقد يكون الآن وقتًا مناسبًا لإضافة العلامة المتوقفة في NPM بحيث يتم توجيه عمليات التثبيت الجديدة إلى ESLint.

قد يكون من المفيد ، أيضًا ، جعل ملاحظة التمهيدي أكثر وضوحًا (المستوى الأعلى) وربط المستخدمين بـ print-eslint.

هل تخطط للقيام بذلك الآن بعد أن تمت تغطية كل حالة استخدام شائعة تقريبًا بواسطة ESLint؟

أعتقد أيضًا وأتمنى أنه عندما يتم إهمال tslint ، فإن eslint تتعرض لمزيد من الضغط وأن يركز المجتمع عليها بشكل أكبر

يساعد tslint-to-eslint-config في تحويل tslint.json إلى .eslinerc.js لكنه لا يمكنه
لا يمكن الاهتمام بالمضمنة tslint:disable:<rule> ، أيضًا ، لم يتم تكوين بعض القواعد بشكل جيد أو لم يتم دعمها بواسطة eslint حتى الآن.

لا تزال هناك بعض الحواف عند الترحيل من tslint إلى eslint ، ما فائدة استخدام eslint لملفات الكتابة المطبوعة؟ للحصول على تناسق أفضل بين مجتمع الطباعة ومجتمع جافا سكريبت؟
إذا كان المشروع يستخدم الكتابة المطبوعة فقط ، بدون ملفات جافا سكريبت على الإطلاق ، فهل لا تزال هناك أي فائدة بعد إجراء الترحيل؟

يساعد tslint-to-eslint-config في تحويل tslint.json إلى .eslinerc.js لكنه لا يمكنه
لا يمكن رعاية مضمنة tslint:disable:<rule>

في الواقع: https://github.com/typescript-eslint/tslint-to-eslint-config/issues/136
مرحبًا بك في المشاركة لإضافته إذا كنت ترغب في ذلك! هناك عمل قيد التقدم للعلاقات العامة على https://github.com/typescript-eslint/tslint-to-eslint-config/pull/246 قد يحتاج إلى بعض المساعدة.

لا تزال هناك بعض الحواف عند الترحيل من tslint إلى eslint ، ما فائدة استخدام eslint لملفات الكتابة المطبوعة؟

يمكنك رؤية الأسباب المذكورة في منشور المدونة المذكور في الجزء العلوي من هذا الموضوع.

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

لطالما كان TSLint محدودًا مقارنةً بـ ESLint ، فهناك مجموعة كاملة من القواعد التي لم يكن لديها مطلقًا والتي لم تكن لدى ESLint. ناهيك عن المكونات الإضافية والمجتمع الأكبر / دعم ESLint دائمًا. بالإضافة إلى ذلك ، لدى الكثير منا eslintrc مهيأ بشكل جيد نستخدمه في كل مكان ، مما يجعل أي مشروع TSLint غير متسق يحتاج إلى إصلاح (باستخدام أداة غير قديمة).

إذا كان هناك أي شيء مفقود من ESLint وهو TSLint ، فمن الأفضل رفعه بحيث يمكن تنفيذه بدلاً من الاستمرار في استخدام أداة قديمة.

شكرًا لرفع المزيد من السياق إلى eslint ، أرى فائدة استخدام eslint.

لقد حاولت بالفعل الانتقال من tslint إلى eslint ولكن يبدو أن بعض الحواف لا يمكن إصلاحها بسهولة لأن eslint ليس لديها مفهوم النوع (وبالتالي فإن المسافة البادئة للنوع العام مكسورة).

فيما يتعلق بدعم الأدوات في eslint (خاصة تلميحات IDE حول ملف التكوين). أتمنى أن أتمكن من المساهمة يومًا ما ولكني لست من ذوي الخبرة ولا لي الحرية في العمل على ذلك حاليًا. (على الأقل ليس في أعلى قائمتي لأن tslint لا يزال يعمل بشكل جيد)

يبدو أن الطريقة الأقل إيلامًا هي استخدام tslint للملفات المطبوعة ، و eslint لملفات جافا سكريبت ، بحيث يمكن لكلا العالمين الاستمتاع بـ "تناسقهما".

نظرًا لأن npm تنص على أن TSLint قد تم إهماله واستخدام ESLint بدلاً من ذلك ، أفترض أن الترحيل قد اكتمل.
شود ألا تغلق هذه القضية؟

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

لا تركز مشاركة المدونة المطلوبة أعلاه على التفاصيل الفنية حول typescript-eslint .
يمكن لمستخدمي TSLint قراءة المزيد حول كيف يعمل typescript-eslint ؟

بشكل عام ، يحتوي ملف print-eslint / README بأكمله على كل ما يلزم للانتقال الشفاف.

هل هناك سبب لعدم تمييز الحزمة نفسها على أنها مهملة في npm؟ مثل طلب على سبيل المثال؟

تم وضع علامة على niklasR الإصدار 6.0.0 على أنه مهمل في NPM وبعد ذلك تم تفكيك كل شيء.

راجع # 4919 و # 4914.

نحن _ نريد_ أن نتحرر من كل الجحيم 😛 ... يجب على الناس التوقف عن استخدام TSLint.

يبدو أننا لم نضع علامة صراحة على الإصدارات الجديدة على أنها مهملة ؛ راجع محفوظات الإصدار على https://www.npmjs.com/package/tslint :
Screenshot showing 6.0.0 as deprecated on npm but later versions not

ليس لدي أذونات -adidahiya ؟

أوه ، غريب ، اعتقدت أن المستندات هنا اقترحت أن هذا الأمر سيهمل جميع الإصدارات المستقبلية المحتملة التي تقع في النطاق:

npm deprecate tslint@^6.0.0 "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information."

... لكنني أفترض أن هذا ليس هو الحال. لقد تقدمت وأهملت الأحدث.

adidahiya شكرًا ، لقد فتحت مشكلة في مستندات NPM هنا: https://github.com/npm/cli/issues/1165

هل يجب أيضًا إهمال الإصدارات القديمة؟ وبالمثل كيف طلب ذلك ؟

سبب سؤالي هو أننا نبحث في ترحيل حزمنا إلى ESLint ، لكننا نستخدم TSLint ^ 5 كثيرًا ، وسيكون من الجيد استخدام عمليتنا الحالية لفحص (300+) من المستودعات الخاصة بنا إشعارات الإيقاف لوضع علامة على أي شيء يحتاج إلى الترحيل.

تم تطبيق عمليات الإهمال دائمًا وفقط على الإصدارات الحالية ؛ إذا كنت تريد إيقاف الإصدارات الجديدة ، فيجب عليك دائمًا إهمالها يدويًا بعد النشر.

لن يكون من الجيد للمستخدمين عرض شيء واضح جدًا حول إهمال TSLint على صفحة جيثب https://palantir.github.io/tslint/؟

لن يكون من الجيد للمستخدمين عرض شيء واضح جدًا حول إهمال TSLint على صفحة جيثب https://palantir.github.io/tslint/؟

هذا هو بالضبط ما كنت أنتظره! يرجى من شخص ما تقديم بعض الإرشادات الواضحة خطوة بخطوة حول الانتقال من tslint إلى eslint

لم يتم تحديث موقع وثائق TSLint على الويب منذ فترة طويلة ، ولكن README هذا الريبو محدث وهناك الكثير من المعلومات المفيدة ، بما في ذلك دليل خطوة بخطوة للترحيل ، في print-eslint README .

إصلاح لرسالة الخطأ
[https://stackoverflow.com/questions/61605380/angular-9-issue-unable-to-run-the-initial-application]
npm تثبيت chokidar
npm cache clean --force
npm install -g @ angular / cli @ latest

install error
مرحبًا فريق Angular ، أنا جديد في Angular ، الرجاء مساعدتي في الخطأ الذي أواجهه أثناء محاولة إنشاء مشروع جديد.

شكرا لك.

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

شكرا لك.

انت في المكان الخطأ
هذا هو palantir وليس angular
يرجى إنشاء مشكلة على https://github.com/angular/angular/issues
أو أفضل من ذلك ، ابحث عما إذا كان هناك بالفعل مشكلة عنوان هذه المشكلة
سعيد للمساعدة ، أراك

بقدر ما أصابني الذهول من طلبهم "هنا" للحصول على مساعدة Angular .. لقد تأثرت تمامًا بأن شعارهم يشبه مقبس الطاقة في المملكة المتحدة.

JoshuaKGoldberg شكرا لك!

يجب أن يأتي اليوم أيضًا حيث تقوم بأرشفة / قفل هذا المستودع.

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

من الجيد أن ترى معظم الناس يحاولون الابتعاد عنه الآن ، لكن كلما كان التخلي عن هذا الأمر أكثر وضوحًا ، كان ذلك أفضل.

أعتقد أنه لم يعد يجب استخدام ts-lint بدلاً من eslint اعتبارًا من سبتمبر 2020

إذا كان مشروعك لا يزال يستخدم ts-lint ، ففكر في استخدام
التحقق من https://github.com/typescript-eslint/tslint-to-eslint-config

لكن typscript-eslint لا تخبرنا حقًا بما هو الخطأ https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

لكن typecript-eslint لا تخبرنا حقًا بما هو الخطأ https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

أعتقد أن هذا صحيح إلى حد ما حتى بالنسبة لـ TSLint ولماذا حتى مع TSLint ، فإننا نسمي أيضًا tsc --noEmit في نصوص الفحص الخاصة بنا.

لقد أنشأت تطبيقًا زاويًا جديدًا بالإصدار 8 وقد تم شحنه افتراضيًا مع tslint. لقد بدأت في استخدام ts config لتنفيذ husky. سؤالي هو ، هل من الإلزامي الانتقال إلى print-eslint على النحو الموصى به نظرًا لحقيقة أنني سأستخدم Angular 8 في مشروعي لبضع سنوات قادمة؟

mayankkalbhor كما رأيت ، لا يزال الإعداد الافتراضي مع Angular هو استخدام TSLint. أعتقد أنه سيستمر حتى Angular 11 أو ما بعده حتى يتم تكوين جميع التكوينات الافتراضية في Angular CLI لـ ESLint ، راجع خارطة الطريق: https://angular.io/guide/roadmap#migration -to-eslint.

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

أعتقد أن المسار الافتراضي لمطوري Angular هو انتظار Angular لتضمين نصوص ترحيل في بعض ترقية Angular المستقبلية ، على الأرجح من Angular 10 إلى 11 أو 11 إلى 12.

ومع ذلك ، يتمتع أي شخص بالحرية في الهجرة إلى ESLint بمفرده. المانع الحقيقي الوحيد لترحيلك هو إذا كان لديك الوقت ولا تمانع في فقدان الميزات غير الموجودة حاليًا في تكوينات ESLint المكافئة. حيث كانت هناك بعض تكوينات الفحص من خلال Codelyzer سابقًا ولدينا الآن بديل وشيك هنا: angular-eslint

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

هل هذا يعني أنني لن أتمكن من استخدام tslint في مشاريعي بعد 1 يناير 2021؟ تستخدم حاليًا بنياتي tslint. لا أرى أي أمر لتثبيت tslint على موقع ويب npm. وتقول إن tslint مهمل الآن. هل يمكن لأحد أن يرد على استفساراتي؟

شكرا لك.

يمكنك استخدامه ، لكنك لن تحصل على أي نوع من الدعم بأي شكل من الأشكال.
أيضا لا مزيد من التحديثات.
لذا نعم ، يجب أن تمضي قدمًا إلى eslint.

كأخر عملية دفع لي ، يدعم tslint المزيد من أنواع التثبيت التلقائي ، لذلك أوصي بتشغيل "tslint --fix" قبل تشغيل eslint.

ربما تغيرت الأمور في غضون ذلك.

سأقوم بفرز هذا الرمز يا

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