我有一个paths用于绝对导入的打字稿应用程序。我的 tsconfig 看起来像这样:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"utils*": ["src/utils*"],
"operations*": ["src/operations*"],
"actions*": ["src/actions*"],
"components*": ["src/components*"],
"constants*": ["src/constants*"],
},
"outDir": "dist",
"module": "esnext",
"target": "esnext",
"moduleResolution": "node",
"noEmit": true,
"lib": ["es2017", "dom"],
"noUnusedLocals": true,
"sourceMap": true,
"skipLibCheck": true,
"allowJs": true,
"jsx": "preserve",
"noUnusedParameters": true,
"preserveConstEnums": true,
"strict": true,
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
},
"exclude": [
"node_modules",
"dist",
],
"include": [
"./src/**/*"
],
"files": [
"./typings/index.d.ts"
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试像这样使用导入:
import { AppStateType } from 'actions/app';
Run Code Online (Sandbox Code Playgroud)
不过我得到cannot find module 'actions/app'
我遵循了这个答案,但它似乎不起作用。
我在这里做错了什么?
的模式paths有点挑剔。
尝试这个:
"paths": {
"utils/*": ["src/utils/*"],
"operations/*": ["src/operations/*"],
"actions/*": ["src/actions/*"],
"components/*": ["src/components/*"],
"constants/*": ["src/constants/*"],
},
Run Code Online (Sandbox Code Playgroud)
请注意添加斜杠。
既然您已经baseUrl设置,我认为这应该可行,但如果不行,下一步可能是指定完整的相对路径(相对于文件tsconfig):
"paths": {
"utils/*": ["./src/utils/*"],
"operations/*": ["./src/operations/*"],
"actions/*": ["./src/actions/*"],
"components/*": ["./src/components/*"],
"constants/*": ["./src/constants/*"],
},
Run Code Online (Sandbox Code Playgroud)
这将满足 TypeScript 编译器的要求,但如果您使用 Webpack 或 Parcel,您可能会抱怨它们无法找到文件,即使 TypeScript 编译得很好。在这种情况下,您需要为捆绑程序设置别名。它看起来有点像这样:
// webpack.config.js or similar
// ...
resolve: {
extensions: [".js", ".jsx"], // import without .js, .jsx, .json extensions
alias: {
"utils": path.resolve(__dirname, "src/utils/*"),
"operations": path.resolve(__dirname, "src/operations/*"),
"actions": path.resolve(__dirname, "src/actions/*"),
"components": path.resolve(__dirname, "src/components/*"),
"constants": path.resolve(__dirname, "src/constants/*")
}
},
Run Code Online (Sandbox Code Playgroud)
// package.json
// ...
"alias": {
"utils": "./src/utils/*",
"operations": "./src/operations/*",
"actions": "./src/actions/*",
"components": "./src/components/*",
"constants": "./src/constants/*"
}
Run Code Online (Sandbox Code Playgroud)