Language-tools: Suporte à importação de componentes Svelte sem extensão

Criado em 23 set. 2020  ·  5Comentários  ·  Fonte: sveltejs/language-tools

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
enhancement

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 .

Todos 5 comentários

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 .

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

shirakaba picture shirakaba  ·  4Comentários

scippio picture scippio  ·  3Comentários

brunnerh picture brunnerh  ·  3Comentários

matthewmueller picture matthewmueller  ·  3Comentários

JAD3N picture JAD3N  ·  5Comentários