Sua solicitação de recurso está relacionada a um problema?
Tenho alguns componentes complexos com muitos subcomponentes. Os subcomponentes são privados e se unem para formar um grande componente.
Aqui está um exemplo:
form/
input.svelte
textarea.svelte
index.svelte
radio.svelte
checkbox.svelte
Descreva a solução que você gostaria
Eu gostaria de ser capaz de resolver form/
em form/index.svelte
vez de escrever form/index.svelte
explicitamente.
Acho que este plugin, por padrão, deve seguir a resolução do estilo node.js para arquivos que têm a extensão .svelte .
form/ => form/index.svelte
form/input => form/input.svelte (or form/input/index.svelte)
form/input.svelte => form/input.svelte
Eu sou contra isso, porque você não tem mais distinção entre qual arquivo é um arquivo Svelte e qual arquivo é um arquivo normal. O que acontece se você tiver index.js
e index.svelte
na mesma pasta? O que deve ser importado? Esta seria uma mudança significativa. Também não é suportado pelos bundlers tanto quanto eu sei.
Para o seu caso específico, sugiro adicionar index.js
com o seguinte conteúdo:
export { default as Index } from './index.svelte';
// ... you can add your other Svelte files here as well
E então importe como
<script>
import { Index } from './form';
</script>
Obrigado pela sua resposta. Gostaria de verificar se estamos de acordo, pois não considero esse assunto muito controverso.
Estou pedindo a capacidade de resolver arquivos Svelte da mesma forma que você resolve qualquer arquivo Javascript, Typescript, JSX ou TSX.
Da mesma forma, você não precisa adicionar a extensão em projetos Typescript ou React:
import A from "./a.ts"
// you can just do
import A from "./a"
O resolvedor de typescript VSCode segue as regras de resolução do Node.js. Seu ponto é super válido quando estamos falando sobre o projeto de regras de resolução do Node. Eu concordo com você em ser mais restritivo.
Mas, dado que o navio navegou, o que torna a extensão .svelte
diferente das extensões .ts
, .tsx
, .jsx
?
Pular extensões é historicamente uma idiossincrasia do mecanismo de resolução do Node. Isaac Z. Schlueter da Npm que, eu acho, estava envolvido na discussão na época, desde então expressou arrependimento sobre isso. E ele foi recebido com incompreensão nos comentários ao seu post. Tenha certeza de que este é um assunto muito controverso.
As importações ESM padrão não têm nada no sentido de pular extensões, e essa é a direção com a qual Svelte (e Rollup) tendem a se alinhar, por padrão.
Dito isso, essa é uma preocupação puramente do bundler que você usa. Se bem me lembro, com Webpack .svelte
extensão é opcional por padrão. E em Rollup, é uma opção do plugin
Dito isso, essa é uma preocupação puramente do bundler que você usa. Se bem me lembro, com Webpack
.svelte
extensão é opcional por padrão. E em Rollup, é uma opção do plugin
Interessante, eu não sabia que a extensão é opcional por padrão no plugin webpack.
Apoiar isso significaria mudar a forma como a resolução do módulo é feita no servidor de linguagem e possivelmente outras coisas. Além disso, precisaria ser uma configuração para que as pessoas possam declarar se desejam ou não esse comportamento - afinal, elas podem precisar alterar sua configuração de construção também se quiserem as importações Svelte escritas sem .svelte
.
Vou reabrir para que outros possam opinar sobre isso.
Caso você queira saber a opinião de Rich sobre isso: https://twitter.com/Rich_Harris/status/1002959357250801664 - e esses também são os mesmos de Ryan Dahl, criador do Node.
Eu também concordo. Só porque você pode resolver arquivos sem uma extensão, não significa que você deva .
Comentários muito úteis
Caso você queira saber a opinião de Rich sobre isso: https://twitter.com/Rich_Harris/status/1002959357250801664 - e esses também são os mesmos de Ryan Dahl, criador do Node.
Eu também concordo. Só porque você pode resolver arquivos sem uma extensão, não significa que você deva .