Automatischer Import von Visual Studio-Code

78

Ich bin gerade dabei, von Webstorm zu Visual Studio Code zu wechseln. Die Leistung in Webstorm ist miserabel.

Visual Studio-Code ist nicht sehr hilfreich, um die benötigten Abhängigkeiten zu finden und zu importieren. Ich habe es bisher manuell gemacht, aber um ehrlich zu sein, würde ich lieber 15 Sekunden warten, bis der Webstorm meinen Import gefunden und hinzugefügt hat, der manuell danach suchen muss.

Screenshot: Import kann nicht gefunden werden

Ich verwende den Angular2-Seed von @ minko-gechev https://github.com/mgechev/angular2-seed

Ich habe eine tsconfig.json in meinem baseDir, die so aussieht:

    {
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "pretty": true,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitUseStrict": false,
    "noFallthroughCasesInSwitch": true
  },
  "exclude": [
    "node_modules",
    "dist",
    "typings/index.d.ts",
    "typings/modules",
    "src"
  ],
  "compileOnSave": false
}

und ich habe eine andere in meinem src / client-Verzeichnis, die so aussieht:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "allowSyntheticDefaultImports": true
  }
}

Ich weiß nicht, warum es zwei gibt. Das Angualr Seed-Projekt verwendet Typenskript-Gulp-Build-Aufgaben, daher denke ich, dass die Kompilierung anders ist.

Was kann ich tun, um vscode hilfreicher zu machen?

Reach4thelasers
quelle
Probieren Sie alm.tools aus 🌹
basarat
:-) das gleiche im Moment erleben. Haben Sie eine Lösung gefunden?
Rico Leuthold
Ja - ich habe herausgefunden, dass ALLES über Erweiterungen hinzugefügt wird. Versuchen Sie "Auto-Import" "Typ-Skript-Import-Unterstützung" "Tsd-Recommender" "npm Intellisense"
Reach4thelasers
Ich habe die Erweiterung "Auto Import" ausprobiert und sie hängt irgendwie, während angezeigt wird, dass es sich um "Scannen" handelt. Ich bin unter Windows 10. Hat jemand das gleiche Problem?
Sang Shin
@each4thelasers hey, ich bin auch in der gleichen Position, in der Sie versucht haben, eine Erweiterung usw. zu finden. Ich habe die oben angegebenen Erweiterungen installiert. Dann habe ich den auf dem Foto erwähnten Code kopiert, aber es wird immer noch der rote Fehler angezeigt PipeTransform gibt mir nicht die Möglichkeit, es automatisch zu importieren, stattdessen erhalte ich die Fehlermeldung, was Sie auf Ihrem Foto anzeigen ... haben Sie es geschafft, dies zu beheben?
Code Ratsche

Antworten:

42

Ich habe dies durch die Installation der verschiedenen Plugins unten zum Laufen gebracht.

Meistens importieren sich die Dinge einfach von selbst, sobald ich den Klassennamen eingebe. Alternativ wird eine Glühbirne angezeigt, auf die Sie klicken können. Oder Sie können pushen F1und "importieren ..." eingeben. Dort gibt es auch verschiedene Optionen. Ich benutze sie alle irgendwie. Auch F1Implementieren zum Implementieren einer Schnittstelle ist hilfreich, funktioniert aber nicht immer.

Liste der Plugins

Screenshot der Erweiterungen

Screenshot der Erweiterungen
* Klicken Sie für die volle Auflösung

Reach4thelasers
quelle
Mussten Sie Konfigurationsdateien ändern? oder war es eine einfache Installation und Aktivierung?
Code Ratchet
1
Nein, ich glaube nicht, dass Konfigurationsänderungen erforderlich sind. Das einzige, was in meiner settings.json enthalten ist, ist "typescript.tsdk": "node_modules / typescript / lib /", wodurch vscode gezwungen wird, die Version von typescript in den node_modules anstelle der auf dem System installierten zu verwenden.
erreichen4thelasers
1
Zu Ihrer Information, meine Typoskript-Version aus der packages.json ist "Typoskript": "2.0.3",
Reach4thelasers
Können Sie bitte Plugins als Liste bereitstellen, da Ihr angehängtes Bild nicht mehr sichtbar ist?
wässrig
1
TypeScript Importerfunktioniert gut, auch mit benutzerdefinierten rootDirsoder Zuordnungen mit pathsin tsconfig.json. Es behebt den fehlerhaften Autoimport von VS Code.
Löwe
41

2018 jetzt. Sie benötigen keine Erweiterungen für den automatischen Import in Javascript (solange Sie diese checkjs: truein Ihrer jsconfig.jsonDatei haben) und TypeScript.

Es gibt zwei Arten von Autoimporten: die Schnellkorrektur zum Hinzufügen fehlender Importe, die bei Fehlern als Glühbirne angezeigt wird:

Geben Sie hier die Bildbeschreibung ein

Und die Vorschläge zum automatischen Import . Während der Eingabe werden Vorschläge angezeigt. Wenn Sie einen Vorschlag für einen automatischen Import akzeptieren, wird der Import automatisch oben in der Datei hinzugefügt

Geben Sie hier die Bildbeschreibung ein

Beide sollten sofort mit JavaScript und TypeScript funktionieren. Wenn die automatischen Importe bei Ihnen immer noch nicht funktionieren, öffnen Sie bitte ein Problem

Matt Bierner
quelle
2
Ja, Autoimporte funktionieren auf Mac sofort, unabhängig davon, ob die Version des Typoskripts Ihres Projekts mit der mit VScode gelieferten Version übereinstimmt. In anderen Betriebssystemen, nämlich Linux, ist dies jedoch nicht der Fall, und Sie müssen auf die Version des Arbeitsbereichs verweisen von TS, wie ich in meiner Antwort erklärt habe.
anorganik
3
Das ist nicht richtig. Wenn das, was ich oben beschreibe, nicht funktioniert, handelt es sich um einen Fehler, und Sie sollten einen Fehlerbericht einreichen. Ich bin der Betreuer der JS / TS-Unterstützung von VS Code und habe diese Funktionen implementiert
Matt Bierner,
4
Gibt es dafür Hotkeys? Ich möchte nicht jedes Mal auf die Glühbirne klicken, wenn ich etwas cmd+.auf Mac importieren möchte
buncis
1
@ Tonio cmd+.auf Mac
Buncis
1
@MattBierner soll dies auch Angular-Komponenten automatisch importieren? Dem Screenshot nach zu urteilen, scheint das OP zu bedeuten.
Aspiring Dev
19

Ich habe das Auto Import Plugin von steoates verwendet, was ziemlich einfach ist.

Findet, analysiert und bietet automatisch Code-Aktionen und Code-Vervollständigung für alle verfügbaren Importe. Funktioniert mit Typescript und TSX.

Alireza Fattahi
quelle
Ich kann bestätigen, dass dieses Plugin gut funktioniert. Es ignoriert sogar meine index.ts. Standardmäßig möchte VS Code aus meiner index.tsDatei importieren . Gute Antwort!
Eric
Hat mir leider nicht geholfen, kann immer noch nicht automatisch aus Modulen importieren in node_modules:(
Pavel
Das Hinzufügen dieser Erweiterung hat bei mir funktioniert. Es importierte das EventEmittervon korrekt automatisch @angular/core( da es für die Schnellkorrektur rot umrandet war ). Ohne diese Erweiterung wurde importiert EventEmittervon protractor( was nicht das war, was ich wollte ). Ich habe hier eine Frage an den MS VSCode-Betreuer @MattBierner bezüglich der verschiedenen Importquellen.
Chris22
12

In der Datei tsconfig.app.json enthält eine Standard-Angular 10-App:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

Sobald ich das Include geändert habe, möchte es sein:

  "include": [
    "src/**/*.d.ts",
    "src/**/*.ts"
  ]

Es hat bei mir funktioniert Es hat bei mir funktioniert

Vương Hữu Thiện
quelle
1
Vielen Dank, Ihre Lösung funktioniert. Wie sich herausstellte, lag das Problem in den Einstellungen von tsconfig, jedoch nicht in der IDE.
amer
Ich würde besser Ihre Lösung in die hinzufügen tsconfig.editor.json)) Nachdem ich Änderungen in tsconfig.app.jsonder App vorgenommen hatte, war der Build defekt)
ame
7

Wenn kürzlich jemand auf dieses Problem gestoßen ist, musste ich eine Einstellung hinzufügen, um die Version des Typoskripts in meinem Arbeitsbereich zu verwenden, damit die automatischen Importe funktionieren. Fügen Sie dazu diese Zeile zu Ihren Arbeitsbereichseinstellungen hinzu :

{
  "typescript.tsdk": "./node_modules/typescript/lib"
}

Klicken Sie dann bei geöffneter Typoskriptdatei in vscode auf die Typenskript- Versionsnummer in der unteren rechten Ecke. Wenn die Optionen oben angezeigt werden , wählen Sie "Arbeitsbereichsversion verwenden" und laden Sie vscode neu .

Jetzt sollten Autoimporte funktionieren.

anorganik
quelle
1
Dies ist nicht erforderlich. Autoimporte funktionieren mit VS Codes gebündelter Version von Typoskript
Matt Bierner
1
@MattBierner in meinem Fall war es notwendig, da ich VScode unter Linux (CentOS) verwendete. Auto-Importe funktionierten nicht, bis ich auf die Installation von Typescript im Arbeitsbereich hinwies, die etwas älter war als das, was mit VScode geliefert wurde
inorganik
Dies ist in fast allen Fällen kein guter Rat. Wenn Sie nicht sehen, dass Autoimporte mit der mitgelieferten Version von Typoskript funktionieren, reichen Sie bitte einen Fehlerbericht ein: github.com/Microsoft/vscode/issues/new?template=bug_report.md
Matt Bierner
2
@MattBierner im Rahmen einer Q & A-Site ist es ein guter Rat. Wenn Autoimporte nicht funktionieren, kann das Problem nicht behoben werden, wenn Sie wissen, dass es sich um einen Fehler handelt. Wir möchten nicht auf eine Fehlerbehebung für diesen Randfall warten, und ich werde keinen weiteren Fehler in einem Repo einreichen, der Zehntausende von Problemen aufweist. Zuletzt möchte ich nur darauf hinweisen, dass dies der Rat ist, der auf der VScode-Website vorgeschrieben ist
inorganik
2
Woher weiß ich also, dass ich einen Fehlerbericht mit VS-Code anstelle einer der Erweiterungen einreichen kann, wenn automatische Importe NICHT funktionieren und ich eine Reihe von Erweiterungen verwende?
Andrew Koster
1

VS Code unterstützt dies jetzt sofort, aber die Funktion funktioniert manchmal und manchmal nicht, wie es scheint. Soweit ich herausfinden konnte, muss VS Code die für den automatischen Import erforderlichen Daten laden, was mehr oder weniger so geschieht:

  • Laden Sie Daten für alle Exporte aus Ihren lokalen Dateien
  • Laden Sie Daten für alle Exporte von node_modules / @ -Typen
  • Laden Sie Daten für alle Exporte aus node_modules / {packageName} nur, wenn eine Ihrer lokalen Dateien sie importiert

Dies wird in diesem Kommentar besser beschrieben: https://github.com/microsoft/TypeScript/issues/31763#issuecomment-537226190 .

Aufgrund von Fehlern im VS-Code oder in den Typdeklarationen bestimmter Pakete funktionieren die letzten beiden Punkte nicht immer. Das war mein Fall, ich konnte keine automatischen Importe von React-Bootstrap in einer einfachen Create-React-App sehen. Was schließlich behoben wurde, war das manuelle Kopieren des Paketordners von node_modules nach node_modules / @ types und das Belassen nur der Typdeklarationsdateien, z. B. Button.d.ts. Dies ist nicht besonders gut, denn wenn Sie jemals den Ordner node_modules löschen, funktioniert er nicht mehr. Ich bevorzuge es jedoch, Importe immer manuell eingeben zu müssen. Dies war mein letzter Ausweg, nachdem ich diese Methoden ausprobiert und versagt hatte:

  • VS-Code aktualisieren (Version 1.45.1)
  • Installieren Sie Typen für Ihr Paket, z npm install --save @types/react-bootstrap
  • Fügen Sie die Datei jsconfig.json hinzu und spielen Sie mit den Einstellungen, wie von anderen vorgeschlagen
  • Probieren Sie alle Plugins für den automatischen Import aus

Ich hoffe das hilft jemandem!

Michal Ciesielski
quelle
1

Wenn Sie Angular verwenden, stellen Sie sicher, dass das tsconfig.jsonkeine Fehler enthält. (im Problemterminal)

Aus irgendeinem Grund habe ich diese Zeilen verdoppelt und es hat bei mir nicht funktioniert

{
  "module": "esnext",
  "moduleResolution": "node",
}
ztvmark
quelle
0

Ich bin auf dieses Problem in Typescript Version 3.8.3 gestoßen.

Intellisense ist das Beste, was wir haben können, aber für mich scheint die automatische Importfunktion auch nicht zu funktionieren. Ich habe versucht, eine Erweiterung zu installieren, obwohl der automatische Import nicht funktioniert hat. Ich habe alle Einstellungen für Erweiterungen erneut überprüft. Schließlich funktionierte die automatische Importfunktion, als ich den Cache löschte

C: \ Benutzer \ Benutzername \ AppData \ Roaming \ Code \ Cache

& Laden Sie den VSCode neu

Hinweis: AppData können nur im Benutzernamen angezeigt werden, wenn Sie im Menü (Ansicht) die Option (Versteckte Elemente anzeigen) auswählen.

In einigen Fällen denken wir möglicherweise, dass ein Importfehler vorliegt, während wir in Wirklichkeit unwissentlich mit veralteten Features oder APIs in Winkel codieren.

Zum Beispiel: Wenn Sie versuchen, so etwas zu codieren

Konstruktor (http: Http) {

// ...}

Wenn Http in der neueren Version bereits veraltet ist und durch HttpClient ersetzt wird, denken wir möglicherweise, dass ein diesbezüglicher Fehler mit dem Fehler beim automatischen Import zusammenhängt. Weitere Informationen finden Sie unter Veraltete APIs und Funktionen

Abhishek Duppati
quelle
0

Füllen Sie die includeEigenschaft in der ersten Ebene des JSON-Objekts tsconfig.editor.jsonwie folgt aus:

"include": [
  "src/**/*.ts"
]

Es funktioniert gut für mich.

Sie können bei Bedarf auch weitere Typescript-Dateierweiterungen hinzufügen, wie hier:

"include": [
  "src/**/*.ts",
  "src/**/*.spec.ts",
  "src/**/*.d.ts"
]
ein Ich
quelle
-1

Ich verwende das 'ImportJS'-Plugin von Devin Abbott für den automatischen Import und Sie können es mit dem folgenden Code installieren

npm install --global import-js

omprakash8080
quelle