最近遇到了在react的项目中,由于一些不可抗力需要给react版本降级,这导致了很多依赖包无法兼容,且react在安装时,会优先安装最新版本,再跳了很多坑后,学到了手动配置npm包管理,在此做个记录。
首先在根目录创建check-deps.js文件,需要通过node.js的child-process模块引入一个方法execSync,child-process的作用是创建和管理子进程,它允许我们在nodejs中执行系统命令,我们后续的npm install就需要依靠它来完成。exec是异步执行,这里使用execSync。
const {execSync} = require('child-process')
const dependencies = [
'react@16.14.0',
'react-dom@16.14.0'
]
这里只做示例,包的种类和版本可以自行添加,我就不过多赘述了。
dependencies.forEach(dep=>{
try{
execSync(npm list ${dep},{stdio:'ignore'})
console.log(${dep}已安装)
}
catch{
console.log(${dep}安装中)
execSync(npm install ${dep},{stdio:'inherit'})
}
})
此处的npm list就是查询依赖包的安装信息,执行同步命令后会返回缓冲区的信息,这样就可以手动控制依赖包安装的版本。
最后在package.json文件的script对象里,加一行命令“safe-install”: "node check-deps.js"
终端运行npm run safe-install即可实现手动配置,满足不再安装已安装了特定版本的依赖包,解决批量install的时候的版本问题