当前位置: 首页 > Web前端 > vue.js

[node]使用child_process子进程执行npm命令

时间:2023-03-31 21:01:06 vue.js

后台项目打包配置需要区分不同配置的环境变量,但是这个变量是平台注入的值,不是NODE_ENV,需要获取injectedvalue来区分配置,所以使用node中的子进程执行打包命令,在执行文件中区分。基础知识Node.js运行在单线程模式下,但是它使用事件驱动来处理并发,这有助于在多核cpu系统上创建多个子进程来提高性能。每个子进程总是有三个流对象:child.stdin、child.stdout和child.stderr。它们可能共享父进程的stdio流,也可能是单独的转向流对象。Node提供了child_process模块来创建子进程。方法有:exec——使用子进程执行命令,缓存子进程的输出,并将子进程的输出作为回调函数参数返回。spawn-使用指定的命令行参数生成一个新进程。fork-是spawn()的一种特殊形式,用于在子进程中运行的模块。与spawn方法不同,fork会在父进程和子进程之间建立一个通信通道,用于进程间的通信。exec方法用于使用子进程执行npm命令。用法child_process.exec使用子进程执行命令,缓存子进程的输出,并将子进程的输出作为回调函数参数返回。在实际使用child_process.exec(command[,options],callback)时,创建一个upload.js文件,如下:const{exec}=require('child_process')const_ENV='test'constCOMMAND=`starkupload**/*.css--appkey=1111--env=${_ENV}--token=2222`exec(COMMAND,(err,stdout,)=>{if(err){console.log(err.stack)console.log('Errorcode:'+error.code)console.log('Signalreceived:'+error.signal)}console.log('stdout:'+stdout)console.log('stderr:'+stderr)})在项目的package.json中添加命令:"scripts":{"upload":"node./bin/upload",}执行npmrunupload触发upload.js中的上传命令文件,使用子进程执行完毕,子进程执行完成后自动关闭。