Der automatische Import in Visual Studio Code bietet nur einen absoluten Pfad mit Lerna-Unterpaketen in TypeScript

74

Aus irgendeinem Grund hat sich kürzlich mein Visual Studio-Code geändert und bietet nur absolute Importe von der Unterpaketebene mit meinen Lerna-Paketen an, zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, schlägt der automatische Import den @package/server/src/databasePfad zur Datei vor, wenn er sich gerade befinden sollte, ../databaseda sich die zu bearbeitende Datei im selben Paket befindet und sich nur ein Ordner unter der Datei befindet, die die Datenbankvariable enthält, die ich verwenden möchte.

Ist dies ein Fehler oder ein Konfigurationsproblem?

Ich habe meine Import Module SpecifierEinstellung für TypeScript in Visual Studio Code auf alle drei Optionen (automatisch, relativ und absolut) festgelegt, und keine davon scheint einen Unterschied zu machen.

Anupheaus
quelle
Ich werde damit spielen, wenn Sie ein Repository einrichten, das ich klonen kann, um das Problem zu reproduzieren. (Ich möchte nicht die Zeit verbringen, um zu versuchen, ein Projekt wie Ihres selbst einzurichten, nur um das Problem möglicherweise nicht zu reproduzieren.)
Matt McCutchen
FWIW, mindestens ein Benutzer hat importModuleSpecifierauf relativein Arbeitsplatz- und Benutzerdateien und die Einfuhren nach wie vor mit einem vollen pat - edit: diese Frage vorgeschlagen TS - Version - es gibt eine andere Version und Ausgabe - Seltsamkeit verursachen könnte. Der Wechsel von TS 2.3.2 zu 3.4.5 hat dieses Problem für mich behoben. / Achselzucken
Ruffin

Antworten:

194

In Visual Studio Code, Menü DateiEinstellungenEinstellungenBenutzereinstellungen ,

"typescript.preferences.importModuleSpecifier": "relative"

Es funktioniert gut für mich. Es importiert

import { RegistrationComponent } from '../../abc-modules/registration/registration.component';

anstelle von

import { RegistrationComponent } from 'app/abc-modules/registration/registration.component';
limbo93
quelle
2
Vielen Dank! Wenn es auf Auto eingestellt ist, scheint es zwischen der Verwendung von relativ und absolut zu wechseln.
Moulde
Ich werde auf etwas hinweisen: Es ist viel besser, einen absoluten Pfad zu haben, aber ausgehend vom Quellverzeichnis (src /) wie "import .. from" my-module / bla / bla / ClassName.js ", da Sie mit diesem Ansatz Pakete und verschieben können Klassen, ohne die Importe zu ändern. Sie sollten also relative Pfade vermeiden.
John Tribe
10
Der Rat von John Tribe ist mit Vanilla JS legitim. Ich verwende jedoch TypeScript mit dem Ordner "src" für TS und dem Ordner "dist" für übertragenes JS, sodass der absolute Pfad einen Laufzeitfehler verursacht.
Hirikarat
erstaunliche Lösung. @hirikarate, tu dir selbst einen Gefallen, hör auf, Bauchmuskeln zu benutzen. Das Ökosystem unterstützt es nicht vollständig (einschließlich der IDEs). Ich habe 6 Monate damit verbracht, dass es funktioniert. Zeitverschwendung
Stav Alfi
1
JavaScript › Preferences: Import Module Specifier Preferred path style for auto imports.-> relative(Auch für Scherztests brechen absolute Pfade die Testsuite @JohnTribe.)
auerbachb
2

Ich bin hier von Google gelandet und hatte das gegenteilige Problem. Meine Visual Studio Code-Instanz importierte immer den relativen Pfad, obwohl er aus einem anderen Lerna- Paket stammte .

Es stellt sich heraus, dass ich einfach vergessen habe, das Paket, das falsch importiert wurde, in die package.jsonDatei meines konsumierenden Pakets einzufügen.

Jetzt funktioniert alles wie erwartet.

Florian Wendelborn
quelle