使用 child_process 的 spawnSync 封装 shell 命令

Node.js 自带的 child_process中,有个spawnSync方法,启动同步的子进程,执行命令。可通过stdio: 'inherit', 设置,将相应的 stdio 流传入/传出父进程。

这样就可以对命令进行一些封装,如增加自定义的环境变量等。

如封装一个 cus-vite.js:

const { spawnSync } = require('child_process')

const args = process.argv.slice(2)

spawnSync('vite', args, {
  shell: true,
  stdio: 'inherit',
  env: {
    CUSTOM_ENV_FLAG: 'ENV1',
    ...process.env,
  },
})

在vite.config.js 中就可以读取到自定义的环境变量信息了:

console.log(process.env.CUSTOM_ENV_FLAG, 'CUSTOM_ENV_FLAG')

在 package.json 中就可以使用这个 node 脚本启动、构建:

"dev": "node cus-vite.js",
"build": "node cus-vite.js build",

通过这样的封装,可以对命令进行一定的拓展,可以针对参数再进行特定的处理,如实现不同环境配置等。