Ваш запрос функции связан с проблемой?
У меня есть несколько сложных компонентов с множеством подкомпонентов. Подкомпоненты являются частными и объединяются в один большой компонент.
Вот пример:
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
Я против этого, потому что тогда вы больше не будете различать, какой файл является файлом 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.
Я тоже согласен. То, что вы можете разрешать файлы без расширения, не означает, что вы должны это
Самый полезный комментарий
Если вы хотите узнать мнение Рича по этому поводу: https://twitter.com/Rich_Harris/status/1002959357250801664 - и это то же самое, что и Райан Дал, создатель Node.
Я тоже согласен. То, что вы можете разрешать файлы без расширения, не означает, что вы должны это