Language-tools: Unterstützt den Import von Svelte-Komponenten ohne Erweiterung

Erstellt am 23. Sept. 2020  ·  5Kommentare  ·  Quelle: sveltejs/language-tools

Bezieht sich Ihre Funktionsanfrage auf ein Problem?

Ich habe einige komplexe Komponenten mit vielen Unterkomponenten. Die Unterkomponenten sind privat und bilden zusammen eine große Komponente.

Hier ist ein Beispiel:

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

Beschreiben Sie die gewünschte Lösung

Ich möchte form/ in form/index.svelte auflösen können, anstatt form/index.svelte explizit zu schreiben.

Ich denke, dieses Plugin sollte standardmäßig der Auflösung von node.js für Dateien mit der Erweiterung .svelte folgen .

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

Hilfreichster Kommentar

Falls Sie Richs Gefühle dazu wissen möchten: https://twitter.com/Rich_Harris/status/1002959357250801664 - und das sind auch die gleichen wie Ryan Dahl, Schöpfer von Node.

Auch ich stimme zu. Nur weil Sie Dateien ohne eine Erweiterung auflösen kann, bedeutet nicht , Sie sollten.

Alle 5 Kommentare

Ich bin dagegen, weil man dann nicht mehr unterscheiden kann, welche Datei eine Svelte-Datei und welche eine normale Datei ist. Was passiert, wenn sich index.js und index.svelte im selben Ordner befinden? Was soll importiert werden? Dies wäre eine bahnbrechende Veränderung. Außerdem wird es meines Wissens auch nicht von den Bundlesern unterstützt.

Für Ihren speziellen Fall schlage ich vor, ein index.js mit folgendem Inhalt hinzuzufügen:

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

Und dann importieren Sie es wie

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

Vielen Dank für Ihre Antwort. Ich möchte noch einmal überprüfen, ob wir auf der gleichen Seite sind, da ich dieses Thema nicht für sehr kontrovers hielt.

Ich bitte um die Möglichkeit, Svelte-Dateien auf die gleiche Weise aufzulösen, wie Sie Javascript-, Typescript-, JSX- oder TSX-Dateien auflösen.

Ebenso müssen Sie die Erweiterung in Typescript- oder React-Projekten nicht hinzufügen:

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

Der VSCode-Typescript-Resolver folgt den Node.js-Auflösungsregeln. Ihr Punkt ist äußerst gültig, wenn wir über das Entwerfen von Node-Auflösungsregeln sprechen. Ich stimme Ihnen zu, restriktiver zu sein.

Aber was unterscheidet die Erweiterung .svelte Erweiterungen .ts , .tsx , .jsx Anbetracht der Tatsache, dass das Schiff gesegelt ist,?

Das Überspringen von Erweiterungen ist historisch eine Eigenart des Auflösungsmechanismus von Node. Isaac Z. Schlüter von Npm, der damals wohl an der Diskussion beteiligt war, hat sich seitdem bedauert. Und in den Kommentaren zu seinem Post stieß er auf Unverständnis. Seien Sie versichert, dass dies sicherlich ein sehr umstrittenes Thema ist.

Standardmäßige ESM-Importe haben nichts im Sinne des Überspringens von Erweiterungen, und das ist die Richtung, an der sich Svelte (und Rollup) standardmäßig ausrichten.

Davon abgesehen ist dies nur ein Anliegen des von Ihnen verwendeten Bundlers. Wenn ich mich richtig erinnere, ist die Erweiterung .svelte bei Webpack standardmäßig optional. Und in Rollup ist es eine Option des Node-Resolve- Plugins.

Davon abgesehen ist dies nur ein Anliegen des von Ihnen verwendeten Bundlers. Wenn ich mich richtig erinnere, ist die Erweiterung .svelte bei Webpack standardmäßig optional. Und in Rollup ist es eine Option des Node-Resolve- Plugins.

Interessanterweise wusste ich nicht, dass die Erweiterung standardmäßig im Webpack-Plugin optional ist.

Dies zu unterstützen würde bedeuten, dass die Modulauflösung im Sprachserver geändert wird und möglicherweise andere Dinge. Außerdem müsste es eine Einstellung sein, mit der die Leute angeben können, ob sie dieses Verhalten wünschen oder nicht - schließlich müssen sie möglicherweise auch ihre Build-Konfiguration ändern, wenn sie möchten, dass Svelte-Importe ohne .svelte .

Ich öffne wieder, damit andere dazu Stellung nehmen können.

Falls Sie Richs Gefühle dazu wissen möchten: https://twitter.com/Rich_Harris/status/1002959357250801664 - und das sind auch die gleichen wie Ryan Dahl, Schöpfer von Node.

Auch ich stimme zu. Nur weil Sie Dateien ohne eine Erweiterung auflösen kann, bedeutet nicht , Sie sollten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen