方案选择
最近时间,做react
项目,然后就想着给项目配置路径别名,毕竟老看着../../../
等这种非常难受,就想着给项目配置个@
作为项目src
的别名拿来使用,之前做的vue
项目自带一个@
路径别名,并且也非常方便配置,但查了下react
,好像并不好弄。
目前来说,我找到了两种方案:
- 使用
npm run eject
暴露config
配置文件夹,来改写wabpack
- 使用第三方的
@craco/craco
。
经过思考,我采用的是第二种方案,因为只是配置个路径别名,把webpack
配置全部暴露出来,完全没必要,而且npm run eject
是不可逆的。
用@craco/craco
其实非常像vueconfig.js
的做法,只用一个简单文件去改写默认配置,方便,没有心智负担。
安装@craco/craco
这里我使用的是npm
,react17
npm i @craco/craco
新建craco.config.ts
在项目根目录下创建craco.config.ts
文件,注意:不是在src
下。
因为我创建的是ts
的项目,如果是js
的项目用craco.config.js
,当然你也可以选择其他类型的配置文件,这里截取@craco/craco
npm Readme,其他形式的不做介绍。
在craco.config.ts
写入:
const path = require("path")
module.exports = {
webpack: {
// 配置路径别名
alias: {
"@": path.join(__dirname, "src"),
},
},
}
export{}
新建path.tsconfig.json
也是在项目根目录下创建,这其实是在配置tsconfig.json
,会以extends
形式导入,名字不一定是要path.tsconfig.json
,因为我只是配置路径别名,所以就这么取了。
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
}
}
然后在项目中的tsconfig.json
导入它。
这其实是也为了让编辑器如VSCode
认识这个路径别名,不然你的编辑器无法感知到这个路径别名,不能进行路径提示,甚至会报错。
疑问:
为什么不直接在
tsconfig.json
进行配置,而要新建一个path.tsconfig.json
,不是多此一举?我刚开始也是这么做的。然后我就发现一个问题,
react
项目启动会重写覆盖你之前写的tsconfig.json
,比如compilerOptions.paths
,直接白写了。不知道有没有人遇到同样的问题。
改写scripts
最后一步,你需要去改写package.json
的scripts
。
最终效果
在VSCode
中使用,都不需要手动导入,项目文件路径变化也会自动改变引用路径哦,简直完美。
不过要注意的是,改了tsconfig.json
后,并不能马上生效,建议是重新启动VSCode
。
如果有什么问题可以在评论区问,本文到此结束⚡️⚡️⚡️。