Language-tools: Prise en charge de l'importation de composants Svelte sans extension

Créé le 23 sept. 2020  ·  5Commentaires  ·  Source: sveltejs/language-tools

Votre demande de fonctionnalité est liée à un problème ?

J'ai des composants complexes avec de nombreux sous-composants. Les sous-composants sont privés et se réunissent pour former un grand composant.

Voici un exemple :

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

Décrivez la solution que vous souhaitez

J'aimerais pouvoir résoudre form/ en form/index.svelte plutôt que d'écrire explicitement form/index.svelte .

Je pense que ce plugin par défaut devrait suivre la résolution de style node.js pour les fichiers qui ont l'extension .svelte .

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

Commentaire le plus utile

Au cas où vous voudriez connaître les sentiments de Rich à ce sujet : https://twitter.com/Rich_Harris/status/1002959357250801664 - et ce sont aussi les mêmes que Ryan Dahl, créateur de Node.

Moi aussi je suis d'accord. Tout simplement parce que vous pouvez résoudre les fichiers sans extension, ne signifie pas que vous devriez.

Tous les 5 commentaires

Je suis contre cela, car vous n'avez alors plus aucune distinction entre quel fichier est un fichier Svelte et quel fichier est un fichier normal. Que se passe-t-il si vous avez index.js et index.svelte dans le même dossier ? Que faut-il importer ? Ce serait un changement décisif. De plus, pour autant que je sache, il n'est pas non plus pris en charge par les bundlers.

Pour votre cas particulier, je suggère d'ajouter un index.js avec le contenu suivant :

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

Et puis importez-le comme

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

Merci pour votre réponse. J'aimerais vérifier que nous sommes sur la même longueur d'onde car je ne considérais pas cette question comme très controversée.

Je demande la possibilité de résoudre les fichiers Svelte de la même manière que vous résolvez n'importe quel fichier Javascript, Typescript, JSX ou TSX.

De la même manière, vous n'avez pas besoin d'ajouter l'extension dans les projets Typescript ou React :

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

Le résolveur de typescript VSCode suit les règles de résolution Node.js. Votre argument est super valable lorsque nous parlons de la conception des règles de résolution des nœuds. Je suis d'accord avec toi pour être plus restrictif.

Mais étant donné que ce navire a navigué, qu'est-ce qui rend l'extension .svelte différente des extensions .ts , .tsx , .jsx ?

Le saut d'extensions est historiquement une particularité du mécanisme de résolution de Node. Isaac Z. Schlueter de Npm qui, je suppose, avait été impliqué dans la discussion à l'époque, a depuis exprimé ses regrets à ce sujet. Et il a rencontré de l'incompréhension dans les commentaires de son message. Rassurez-vous, il s'agit certainement d'un sujet très controversé.

Les importations ESM standard n'ont rien dans le sens de sauter des extensions, et c'est la direction dans laquelle Svelte (et Rollup) ont tendance à s'aligner, par défaut.

Cela étant dit, c'est purement une préoccupation du bundler que vous utilisez. Si je me souviens bien, avec Webpack, l'extension .svelte est facultative par défaut. Et dans Rollup, c'est une option du plugin de

Cela étant dit, c'est purement une préoccupation du bundler que vous utilisez. Si je me souviens bien, avec Webpack, l'extension .svelte est facultative par défaut. Et dans Rollup, c'est une option du plugin de

Intéressant, je ne savais pas que l'extension est optionnelle par défaut dans le plugin webpack.

Soutenir cela signifierait changer la façon dont la résolution du module est effectuée dans le serveur de langue, et peut-être d'autres choses. En outre, il faudrait que les utilisateurs puissent déclarer s'ils souhaitent ou non ce comportement - après tout, ils devront peut-être également modifier leur configuration de construction s'ils souhaitent que les importations Svelte soient écrites sans .svelte .

Je vais rouvrir pour que d'autres puissent peser là-dessus.

Au cas où vous voudriez connaître les sentiments de Rich à ce sujet : https://twitter.com/Rich_Harris/status/1002959357250801664 - et ce sont aussi les mêmes que Ryan Dahl, créateur de Node.

Moi aussi je suis d'accord. Tout simplement parce que vous pouvez résoudre les fichiers sans extension, ne signifie pas que vous devriez.

Cette page vous a été utile?
0 / 5 - 0 notes