reactjs - kan inte automatiskt importera react-komponenter från node-moduler
Jag har nyligen börjat arbeta med VS Code. Jag använder Material UI med React och TypeScript. Men jag kan inte importera Material UI-komponenterna med alt(option) + enter-genvägen. Jag använder en Mac och den version av TypeScript som jag använder är 3.0.3. Däremot de React-komponenter som jag skapar explicit, de kan jag importera med den ovan nämnda genvägen. Följande är package.json som jag använder:
{
"name": "portfolio",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "webpack"
},
"author": "ahujru",
"license": "ISC",
"dependencies": {
"@material-ui/core": "3.0.3",
"@material-ui/icons": "3.0.1",
"@types/material-ui": "0.21.5",
"@types/react": "16.4.14",
"@types/react-dom": "16.0.7",
"awesome-typescript-loader": "5.2.1",
"css-loader": "1.0.0",
"node-sass": "4.9.3",
"react": "16.5.1",
"react-dom": "16.5.1",
"sass": "1.13.4",
"sass-loader": "7.1.0",
"source-map-loader": "0.2.4",
"style-loader": "0.23.0",
"typeface-roboto": "0.0.54",
"typescript": "3.0.3",
"webpack": "4.19.0",
"webpack-cli": "3.1.0",
"webpack-dev-server": "3.1.8"
}
}
och tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"module": "commonjs",
"watch": true,
"sourceMap": true,
"outDir": "target",
"target": "es6",
"jsx": "react",
"noImplicitAny": true,
"moduleResolution": "node"
},
"include": [
"./src/**/*"
],
"exclude": [
"node_modules"
]
}
Jag har redan installerat plugins som npm intellisense, intellij keybindings och auto import men fortfarande verkar ingenting hända. Kan någon vänligen berätta för mig vad jag saknar här.
Svar #1
Jag tror att jag kan reproducera problemet du ser. Baserat på mina tester fungerar auto-importfunktionen som är inbyggd i VS Code endast för symboler som är definierade i filer som redan är laddade som en del av ditt projekt eftersom de matchar, eller är direkt eller indirekt importerade av filer som matchar, include-inställningen i tsconfig.json. (Se denna tråd för viss bakgrund.)
Jag började med dina konfigurationsfiler och en tom källfil men tog bort @types/material-ui eftersom det är för det gamla material-ui-paketet (som du inte har installerat) och bara förvirrar saken. Vid det här laget, om jag anropar kodkomplettering med Ctrl-Space, erbjuds jag inte Material UI-komponenterna (AppBar, Avatar, ...). Men om jag lägger till en import, till exempel import { AppBar } from "@material-ui/core";, tvingar det TypeScript-servern att ladda @material-ui/core, så nu om jag anropar kodkomplettering igen, erbjuds jag resten av Material UI-komponenterna. Om du behöver att automatisk import ska fungera utan en befintlig import, kan du lägga till de lämpliga .d.ts-filerna i include-listan i tsconfig.json, även om du då skulle vilja använda en separat tsconfig.json-fil för batchkompilering så att du inte försöker skriva över JavaScript-filerna i @material-ui/core-paketet.
Jag har inte testat några tredjeparts plug-ins för automatisk import och kan inte uttala mig om deras beteende.