Language-tools: Поддержка импорта компонентов Svelte без расширения

Созданный на 23 сент. 2020  ·  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 - и это то же самое, что и Райан Дал, создатель 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. Ваша точка зрения очень важна, когда мы говорим о разработке правил разрешения узлов. Я согласен с вами в отношении более строгих ограничений.

Но учитывая, что этот корабль уже отплыл, что отличает расширение .svelte расширений .ts , .tsx , .jsx ?

Пропуск расширений исторически является отличительной чертой механизма разрешения Node. Исаак З. Шлютер из Npm, который, я полагаю, принимал участие в дискуссии в то время, с тех пор выразил сожаление по этому поводу. И его встретили непониманием в комментариях к своему посту. Будьте уверены, это, безусловно, очень противоречивая тема.

Стандартный импорт ESM не имеет ничего общего с пропуском расширений, и это направление, с которым Svelte (и Rollup) по умолчанию стремится согласовать.

При этом, это чисто забота используемого вами связующего. Если я правильно помню, с Webpack расширение .svelte по умолчанию не является обязательным. А в Rollup это опция подключаемого модуля

При этом, это чисто забота используемого вами связующего. Если я правильно помню, с Webpack расширение .svelte по умолчанию не является обязательным. А в Rollup это опция подключаемого модуля

Интересно, что я не знал, что расширение по умолчанию является необязательным в плагине webpack.

Поддержка этого означала бы изменение способа разрешения модуля на языковом сервере и, возможно, другие вещи. Кроме того, это должна быть настройка, чтобы люди могли заявить, хотят ли они этого поведения - в конце концов, им может потребоваться изменить конфигурацию сборки, если они хотят, чтобы импорт Svelte был написан без .svelte .

Я открою снова, чтобы другие могли взвесить это.

Если вы хотите узнать мнение Рича по этому поводу: https://twitter.com/Rich_Harris/status/1002959357250801664 - и это то же самое, что и Райан Дал, создатель Node.

Я тоже согласен. То, что вы можете разрешать файлы без расширения, не означает, что вы должны это

Была ли эта страница полезной?
0 / 5 - 0 рейтинги