工作中的那点事之 项目相关
项目依赖冲突
项目同时使用了依赖 a 和 b,而且 a 和 b 都使用了依赖 c,不过版本不一样。
大多数情况下,npm
可以自动解决依赖项之间的冲突。但是也有解决不了冲突的情况,这种时候可以通过配置resolutions
来解决。
resolutions
字段可以指定使用哪个版本。
比如(假设下面的 a 依赖 1.0.0 版本的 c,b 则依赖 2.0.0)
1 |
|
madge
检查循环依赖
使用起来比较简单,scripts 添加命令"madge": "madge ./src --circular --extensions ts,tsx"
,然后执行npm run madge
即可。
会检查src
目录下ts
、tsx
文件有没有存在循环依赖。
例子
app.tsx
1 |
|
UserCard.tsx
1 |
|
依赖关系大致如上图。
执行命令后,会显示哪里出现了循环依赖
把上面的type User
移动到UserCard.ts
中后,再执行命令
搭配husky
、liny-staged
使用
检查循环依赖只需要在提交代码的时候,对改动文件进行检测即可,所以可以搭配husky
、liny-staged
使用。
husky
、lint-staged
的使用可以自行学习,也可以参考笔者之前的React 搭建规范
package.json
添加lint-staged
:
1 |
|
lint-staged
已经限制了会被检测的文件,所以scripts
下的命令也可以简化为"madge": "madge ./src"
。
效果:
-i madge.png
生成依赖图
需要安装
Graphviz
,并配置环境变量
- 不能直接在
lint-staged
中配置,不然循环依赖检查就不生效了(生成图片,但是提交并没有被拦截) - 配置命令:
"madge": "madge ./src -i madge.png"
。commit 检查的时候不会生成依赖图片。
综上所述,生成依赖图应该单独作为一个命令。"generate:madge": "madge ./src -i madge.png --extensions ts,tsx"
改成上面的命令后,就不再是检测循环依赖,而是生成依赖图片。可以从图片中看依赖关系有没有问题。