reactjs - Az abszolút útvonal nem működik a Vite projektben React TS
Küzdök azért, hogy az abszolút útvonal működjön egy Vite react-ts projektben.
Így hoztam létre a projektet
npm init @vitejs/app
npx: installed 6 in 1.883s
√ Project name: ... test-vite
√ Select a framework: » react
√ Select a variant: » react-ts
Ezután hozzáadtam a baseUrl-t a tsconfig.json-hoz a TS hivatalos dokumentációja alapján:
{
"compilerOptions": {
"baseUrl": "./src",
...
követte egy egyszerű komponens hozzáadása (T:\test-vite\src\components\Test.tsx)
import React from "react";
const Test = () => <h1>This is a Test.</h1>;
export default Test;
Végül importálom a Test komponenst az App.tsx fájlban,
de nem engedi, hogy abszolút útvonalat használjak:
import Test from "components/Test";
Ezt a hibát kapom
míg ha relatív utat használok, az alkalmazás dev és build módban hibamentesen működik:
import Test from "./components/Test";
Hogyan tudom az abszolút útvonalat működésre bírni a projektben?
Válasz #1
Itt két probléma van:
- Mondd meg a TypeScriptnek, hogyan oldja fel az import útvonalát
- Mondd el a Vite-nak, hogyan építse fel az import útvonalat
Csak a TypeScriptnek mondod meg, hogyan oldja fel, de a Vite nem tudja, hogyan építse. Szóval hivatkozz a hivatalos dokumentum resolve.alias részére, talán ez az, amit szeretnél:
// vite.config.ts
{
resolve: {
alias: [
{ find: '@', replacement: path.resolve(__dirname, 'src') },
],
},
// ...
}
Így importálhatod a path-ot (vagy bármely modult a ./src alatt):
import Test from "@/components/Test";
import bar from "@/foo/bar"
Ezen felül közvetlenül használhatod a Vite plugint, a vite-tsconfig-paths-t, így nem kell manuálisan konfigurálnod a resolve.alias-t
Kövesse az alábbi utasításokat:
Telepítsd a
vite-tsconfig-paths-t fejlesztői függőségkéntA
vite-tsconfig-pathsbeillesztése a vite.config.ts modul segítségével
import { defineConfig } from 'vite'
import tsconfigPaths from 'vite-tsconfig-paths'
export default defineConfig({
plugins: [tsconfigPaths()],
})
Válasz #2
A keresési eredmények révén jutottam ide, valami mást kerestem, nevezetesen, hogyan lehet egyszerű abszolút importot csinálni, például import { foo } from 'src/lib/foo.ts'
Tehát ha van egy /src könyvtárad, amely az összes kódot tartalmazza, és szeretnél egy abszolút import útvonalat használni.
vite.config.ts
export default defineConfig({
...
resolve: {
alias: {
src: path.resolve('src/'),
},
}
})
tsconfig.json
{
"compilerOptions": {
...
"baseUrl": "./"
}
}
Ne feledje, hogy ez egy trükk: a src egy alias, így úgy tűnik, mintha az útvonal abszolút lenne a Vite-ban. Ha van egy másik könyvtár a gyökérkönyvtárban, a /src mellett, akkor hozzá kell adnia egy másik alias-t ahhoz a könyvtárhoz.
Válasz #3
@Yuns megoldása működik, de hibát jelez a VS Code-ban. És megszakította az automatikus importálást a VS Code-ban.
Ahhoz, hogy mind a vscode-ban, mind a vite-ban működjön, alias-t adtam mind a tsconfig-hoz, mind a vite.config-hoz.
// tsconfig.json
{
"paths": {
"@/*": ["src/*"]
}
// ...
}
// vite.config.ts
{
resolve: {
alias: [{ find: '@', replacement: '/src' }],
},
// ...
}
Ezután így tudnám importálni (a svelte alkalmazás a src könyvtárban van)
import Header from '@/components/Header.svelte
Válasz #4
Keresed a import {...} from "src/foo/bar"; kódot?
Én is a keresési találatokon keresztül jutottam ide, mint a Maciej Krawczyk nevű felhasználó, de a @ rész sem érdekelt. Annak a felhasználónak a válasza segített nekem, de problémám volt a path.resolve résszel (ReferenceError, mert a path nem volt definiálva), így egy kicsit más megközelítést használtam:
vite.config.ts
export default defineConfig({
...
resolve: {
alias: {
src: "/src",
},
},
...
})
A Vite feloldóje a /src abszolút útvonalat úgy tekinti, mint ahonnan a szerver szolgáltat (lásd GH issue). Tehát ha a projekt gyökeréből futtatod/építed a projektet, ahol a src egy felső szintű könyvtár - ami elég gyakori -, ez az alias a Vite-et a megfelelő irányba mutatja.
tsconfig.json
{
"compilerOptions": {
...
"baseUrl": "./",
"paths": {
"src/*": [
"./src/*"
]
}
}
}
Ez gyakorlatilag ennek a StackOverflow válasznak a vak követése. A TypeScript-nek tudnia kell, hogy különleges feloldás történik, különben a TS megriad a nem létező src csomag miatt, és nem tudja, hol kellene keresnie. (Megjegyzés: Miután megváltoztattam a TS konfigurációmat, a VSCode nem vette azonnal észre a változást, így még mindig kaptam figyelmeztetéseket. Kiléptem, újra megnyitottam, és kb. 15 másodpercet kellett várnom, mire a figyelmeztetések eltűntek.)
