今天我们来从零构建一个简易的node脚本插件,方便操作shell,构建自己的脚本工具,帮助大家理解一些node模块,webpack打包过程及npm发布过程。
child_process.exec
要使用node操作shell,首先要了解node中的child_process.exec,简单的来讲,exec会开启一个shell,并且执行输入的命令,就像是大家使用git bash来执行某些命令,如npm init。介绍完了,show code。
文件结构
首先创建一个结构如下的文件夹,并执行npm init -y
├─src
└─index.js
插件编写
在index.js文件中,编写主要代码。
首先引入所需要的exec
const util = require('util');
const exec = util.promisify(require('child_process').exec);
一般所需要的即三个参数,执行的命令行(command),执行的目录(cwd),执行的超时时间(timeout),即
exec(command, {
cwd: path || null, timeout: timeout || 0 })
执行命令的代码如下所示:
/**
* @name: 执行命令行
* @param {Array} cmd/执行命令语句
* @param {String} path/执行命令的路径
* @param {Number} timeout/执行命令的超时时间
* @return: {Boolean} 是否成功
*/
const shell = async (arr) => {
for (let i = 0; i < arr.length; i++) {
const {
cmd, path, timeout } = arr[i]
// 组装执行命令
const command = cmd.reduce((total, item, index) => {
if (index === 0) {
return total + item
} else {
return total + ` && ${
item}`
}
}, '')
const {
error, stdout, stderr } = await exec(command, {
cwd