Muh*_*ooq 6 typescript reactjs tsconfig tsconfig-paths
我正在尝试映射 tsconfig.json 中的路径以摆脱相对路径地狱。我的React App 基于 Create-React-App。我尝试了这个SO 线程并在我的 tsconfig.json 中添加了路径。我的 tsconfig.json 是
{
"compilerOptions": {
"baseUrl": "src",
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react",
"strictNullChecks": false
},
"include": [
"src"
]
}
Run Code Online (Sandbox Code Playgroud)
当我在 VS Code 中编译我的项目时,它会从 tsconfig.json 中删除路径条目,并显示以下消息。为什么我的基于 React脚本的 React 项目不支持别名导入?
Abr*_*ham 12
不再支持路径别名
您现在可以执行此操作,直接导入相对于src目录的文件
转到您的jsconfig.json文件添加基本 URL"."
"compilerOptions": {
"baseUrl":".",
...
Run Code Online (Sandbox Code Playgroud)
src然后你可以直接从目录导入东西
import Myfile from "src/myfile.js"
Run Code Online (Sandbox Code Playgroud)
我将Angelo P 的答案更改config-overrides.js为
const path = require('path');
module.exports = function override(config, env) {
config.resolve = {
...config.resolve,
alias: {
...config.resolve.alias,
"@src": path.resolve(__dirname, 'src/'),
"@api": path.resolve(__dirname, "src/API/"),
"@assets": path.resolve(__dirname, "src/assets/"),
"@components": path.resolve(__dirname, "src/components/"),
"@containers": path.resolve(__dirname, "src/containers/"),
"@css": path.resolve(__dirname, "src/css/"),
"@customHooks": path.resolve(__dirname, "src/CustomHooks/"),
"@helperFuncs": path.resolve(__dirname, "src/HelperFuncs/"),
"@hoc": path.resolve(__dirname, "src/hoc/"),
"@middlewares": path.resolve(__dirname, "src/middlewares/"),
"@models": path.resolve(__dirname, "src/models/"),
"@store": path.resolve(__dirname, "src/store/"),
"@actions": path.resolve(__dirname, "src/store/actions"),
"@reducers": path.resolve(__dirname, "src/store/reducers/"),
"@sagas": path.resolve(__dirname, "src/store/sagas/"),
"@typings": path.resolve(__dirname, "src/Typings/"),
"@utils": path.resolve(__dirname, "src/utils/")
},
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json', '.d.ts']
};
return config;
};
Run Code Online (Sandbox Code Playgroud)
工作起来就像一个魅力,但唯一缺少的是 VSCode 自动完成。React 启动时会出现以下警告:
The following changes are being made to your tsconfig.json file:
- compilerOptions.paths must not be set (aliased imports are not supported)
Run Code Online (Sandbox Code Playgroud)
所以我假设它path从 tsconfig.json 中删除了该字段,并且 VSCode 无法获取别名,因此在 VSCode 中ESLint给出TS以下错误,但一切正常。
Unable to resolve path to module '@typings/...'.eslintimport/no-unresolved
Cannot find module '@typings/...' or its corresponding type declarations.ts(2307)
Run Code Online (Sandbox Code Playgroud)
有人有解决方案吗?
更新
通过进行以下更改设法使其全部正常工作:
tsconfig.paths.json
{
"compilerOptions": {
"paths": {
"@src/*": ["./src/*"],
"@api/*": ["./src/API/*"],
"@assets/*": ["./src/assets/*"],
"@components/*": ["./src/components/*"],
"@containers/*": ["./src/containers/*"],
"@css/*": ["./src/css/*"],
"@customHooks/*": ["./src/CustomHooks/*"],
"@helperFuncs/*": ["./src/HelperFuncs/*"],
"@hoc/*": ["./src/hoc/*"],
"@middlewares/*": ["./src/middlewares/*"],
"@models/*": ["./src/models/*"],
"@store/*": ["./src/store/*"],
"@actions/*": ["./src/store/actions*"],
"@reducers/*": ["./src/store/reducers/*"],
"@sagas/*": ["./src/store/sagas/*"],
"@typings/*": ["./src/Typings/*"],
"@utils/*": ["./src/utils/*"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意*末尾的@.../*
tsconfig.json
{
"extends": "./tsconfig.paths.json",
"compilerOptions": {
"target": "es6",
"lib": [
"dom",
"dom.iterable",
"esnext",
"es2015.promise"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"plugins": [
{
"name": "typescript-plugin-css-modules"
}
],
"resolveJsonModule": true,
"baseUrl": ".",
},
"include": [
"src",
"src/**/*.ts"
]
}
Run Code Online (Sandbox Code Playgroud)
npm i -D eslint-plugin-import @typescript-eslint/parser eslint-import-resolver-typescript
.eslintrc.json
{
...,
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".jsx", ".ts", ".tsx", ".d.ts"]
},
"typescript": {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |