Language-tools: دعم استيراد مكونات Svelte بدون تمديد

تم إنشاؤها على ٢٣ سبتمبر ٢٠٢٠  ·  5تعليقات  ·  مصدر: sveltejs/language-tools

هل طلب الميزة الخاص بك متعلق بمشكلة؟

لدي بعض المكونات المعقدة مع العديد من المكونات الفرعية. المكونات الفرعية خاصة وتجتمع معًا لتكوين مكون واحد كبير.

هذا مثال:

form/
  input.svelte
  textarea.svelte
  index.svelte
  radio.svelte
  checkbox.svelte

صِف الحل الذي تريده

أود أن أكون قادرًا على حل form/ إلى form/index.svelte بدلاً من كتابة form/index.svelte بشكل صريح.

أعتقد أن هذا المكون الإضافي بشكل افتراضي يجب أن يتبع دقة نمط node.js للملفات التي لها امتداد .svelte .

form/             => form/index.svelte
form/input        => form/input.svelte (or form/input/index.svelte)
form/input.svelte => form/input.svelte
enhancement

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

في حال كنت تريد معرفة مشاعر ريتش بشأن هذا: https://twitter.com/Rich_Harris/status/1002959357250801664 - وتلك هي أيضًا نفس مشاعر Ryan Dahl ، مبتكر Node.

أنا أيضا أوافق. فقط لأنك يمكن حل الملفات دون تمديد، لا يعني أنك يجب.

ال 5 كومينتر

أنا ضد هذا ، لأنه لم يعد لديك أي تمييز بعد الآن بين أي ملف هو ملف Svelte وأي ملف هو ملف عادي. ماذا يحدث إذا كان لديك index.js و index.svelte في نفس المجلد؟ ما الذي يجب استيراده؟ سيكون هذا تغيير جذري. كما أنه غير مدعوم من قبل الحزم سواء على حد علمي.

لحالتك الخاصة ، أقترح إضافة index.js بالمحتويات التالية:

export { default as Index } from './index.svelte';
// ... you can add your other Svelte files here as well

ثم قم باستيراده مثل

<script>
   import { Index } from './form';
</script>

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

أطلب القدرة على حل ملفات Svelte بنفس الطريقة التي تحل بها أي ملف Javascript أو Typescript أو JSX أو TSX.

بالطريقة نفسها ، لا تحتاج إلى إضافة الامتداد في مشاريع Typescript أو React:

import A from "./a.ts"
// you can just do
import A from "./a"

يتبع محلل VSCode المكتوب قواعد دقة Node.js. وجهة نظرك صحيحة للغاية عندما نتحدث عن تصميم قواعد Node's Resolution. أنا أتفق معك في أن تكون أكثر تقييدًا.

ولكن بالنظر إلى أن السفينة قد أبحرت ، ما الذي يجعل الامتداد .svelte مختلفًا عن الامتدادات .ts ، .tsx ، .jsx ؟

يعد تخطي الامتدادات من الناحية التاريخية خصوصية لآلية حل Node. Schlueter من Npm والذي ، على ما أعتقد ، كان قد شارك في المناقشة في ذلك الوقت ، أعرب منذ ذلك الحين عن أسفه حيال ذلك. وقد قوبل بعدم الفهم في التعليقات على منشوره. كن مطمئنًا أن هذا بالتأكيد موضوع مثير للجدل للغاية.

لا تحتوي عمليات استيراد ESM القياسية على أي شيء بمعنى تخطي الامتدادات ، وهذا هو الاتجاه الذي يميل Svelte (و Rollup) إلى التوافق معه افتراضيًا.

ومع ذلك ، فإن هذا مصدر قلق بحت للمجمع الذي تستخدمه. إذا كنت أتذكر بشكل صحيح ، فإن امتداد Webpack .svelte اختياري افتراضيًا. وفي Rollup ، يعد هذا أحد خيارات المكون الإضافي

ومع ذلك ، فإن هذا مصدر قلق بحت للمجمع الذي تستخدمه. إذا كنت أتذكر بشكل صحيح ، فإن امتداد Webpack .svelte اختياري افتراضيًا. وفي Rollup ، يعد هذا أحد خيارات المكون الإضافي

مثير للاهتمام ، لم أكن أعرف أن الامتداد اختياري افتراضيًا في المكون الإضافي webpack.

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

سأعيد فتحه حتى يتمكن الآخرون من المشاركة في هذا الأمر.

في حال كنت تريد معرفة مشاعر ريتش بشأن هذا: https://twitter.com/Rich_Harris/status/1002959357250801664 - وتلك هي أيضًا نفس مشاعر Ryan Dahl ، مبتكر Node.

أنا أيضا أوافق. فقط لأنك يمكن حل الملفات دون تمديد، لا يعني أنك يجب.

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