有个项目需要全局安装一个包(要使用命令),考虑到要使用自动化部署,又不想直接在服务器上操作安装,所以在代码中进行全局安装。大体思路是利用preinstall在安装依赖前进行全局检查有没有需要的那个全局包,没有就安装。具体代码如下:
package.json:
{ "name": "ant-design-pro", "scripts": { "preinstall": "node ./scripts/preinstall.js", }}
preinstall.js:
const { exec } = require('child_process');// exec('npm ls -g @sentry/cli', function (...arg) {// console.log(arg, 'arg')// });exec('npm ls -g', function (_, packages) { console.log(packages, 'arg') if (packages?.includes('@sentry/cli')) { console.log('有') } else { exec('npm i -g @sentry/cli'); console.log('没有') }});
参考文章:
认识node:zhuanlan.zhihu.com/p/441973029
child_process:blog.51cto.com/u_15283585/…
exec同步异步:blog.csdn.net/woyebuzhida…