我试图通过将以下值添加到tsconfig.json中来设置项目中的路径别名:
"compilerOptions": {
"baseUrl": "src",
"paths": {
"@store/*": ["store/*"]
},
如果我创建导入,则IntelliJ或VSCode都不会打扰我:
import { AppState } from '@store/index';
但是当我编译应用程序时,我收到以下警告:
The following changes are being made to your tsconfig.json file:
- compilerOptions.paths must not be set (aliased imports are not supported)
炸弹说找不到参考:
TypeScript error in C:/xyz.tsx(2,26):
Cannot find module '/store'. TS2307
有没有解决方法,或者create-react-app --typescript
不支持它?
答案 0 :(得分:7)
就我而言,我使用craco和craco-alias
解决了此问题安装craco和craco-alias npm install @craco/craco --save
和npm i -D craco-alias
在根目录中创建tsconfig.paths.json
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@components/*" : ["./components/*"]
}
}
}
在tsconfig.paths.json
中扩展tsconfig.json
{
"extends": "./tsconfig.paths.json",
//default configs...
}
在根目录中创建craco.config.js
const CracoAlias = require("craco-alias");
module.exports = {
plugins: [
{
plugin: CracoAlias,
options: {
source: "tsconfig",
// baseUrl SHOULD be specified
// plugin does not take it from tsconfig
baseUrl: "./src",
/* tsConfigPath should point to the file where "baseUrl" and "paths"
are specified*/
tsConfigPath: "./tsconfig.paths.json"
}
}
]
};
package.json
中将与"start": "react-scripts start"
交换"start": "craco start"
答案 1 :(得分:2)
这可以通过 react-app-rewire-alias (对于react-app-rewired或customize-cra或craco)解决:
根据文档,将react-scripts
中的package.json
替换并配置下一个:
// config-overrides.js
const {alias, configPaths} = require('react-app-rewire-alias')
module.exports = function override(config) {
return alias(configPaths('./tsconfig.paths.json'))(config)
}
像这样在json中配置别名:
// jsconfig.paths.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"example/*": ["example/src/*"],
"@library/*": ["library/src/*"]
}
}
}
并在主打字稿配置文件的extends
部分中添加此文件:
// tsconfig.json
{
"compilerOptions": {
// ...
"extends": "./tsconfig.paths.json",
}
}
答案 2 :(得分:1)
有同样的问题。目前不支持。
CRA团队仍在开发此功能: https://github.com/facebook/create-react-app/pull/6116
如果您编辑tsconfig CRA,则会删除更改:https://github.com/facebook/create-react-app/issues/6269
此线程中有一些技巧:https://github.com/facebook/create-react-app/issues/5118要使别名正常工作,但是需要对CRA设置进行自定义,这不适合我的用例(按原样使用CRA)。
答案 3 :(得分:1)
@oklas.
I've resolved using the following in config-overrides.js which is same as above. But Thanks a lot for sharing this answer
`const {alias, configPaths} = require('react-app-rewire-alias')
module.exports = function override(config) {
alias({
...configPaths('base-tsconfig.json')
})(config)
return config
} `
答案 4 :(得分:-1)
尝试将别名添加到您的webpack配置。像这样的东西。
{
resolve: {
alias: {
@store: path.resolve(__dirname, '../store/'),
},
},
}
答案 5 :(得分:-1)
还使用了ts-loader
和craco来解决此问题-此处描述:https://stackoverflow.com/a/63545611/10813908
声明的设置实质上允许通过craco覆盖内置的webpack配置来扩展CRA,还允许CRA代码直接引用mono-repo中外部/共享包中的打字稿文件。