场景
在开发过程中,常会遇到如下命令:
git add .
git commit -m '*****'
git push
Shelljs
这个库能够让我们在js文件中执行shell命令。shelljs做的事就是自动化,从耗时的重复性常规动作里解放出来,提升开发效率和工作心情。
1.Installing
$ npm install shelljs -D
- 在根目录下新建文件shell.js,内容如下:
let shell = require('shelljs')
let name = process.argv[2] || 'Auto-commit';
let exec = shell.exec
if (exec('git add .').code !== 0) {
echo('Error: Git add failed')
exit(1)
}
if (exec(`git commit -am "${name}"`).code !== 0) {
echo('Error: Git commit failed')
exit(1)
}
if (exec('git push').code !== 0) {
echo('Error: Git commit failed')
exit(1)
}
3.只用一条命令执行以上所有任务,在package.json中加入,方法如下:
"script":{
"push":"node ./shell.js"
}
$ npm run push 测试shelljs提交代码
image.png
上述操作就可以通过执行shelljs脚本提交代码啦。
Examples
1.运行命令环境时,配置文件config根据开发和生产环境进行区分, 所以这里根据命令环境,将文件复制到目标文件,以vue.config.js为例,区分开发和生产环境:
image.png
// 运行命令环境 用于config区分开发和生成环境
const shell = require('shelljs')
const apiEnv = process.env.API_ENV
shell.cp(`./src/config/${apiEnv}.js`, './src/config/index.js')
image.png
基本语法
-
shell.which(command)
在环境变量PATH中寻找指定命令的地址,判断该命令是否可执行,返回该命令的绝对地址 -
echo
在控制台输出指定内容 -
exit(code)
以退出码为code退出当前进程
//引入shelljs
var shell = require('shelljs')
//检查控制台是否以运行`git `开头的命令
if (!shell.which('git')) {
//在控制台输出内容
shell.echo('Sorry, this script requires git');
shell.exit(1);
}
4.rm([options,] file [,file ...])
删除一个目录中一个或多个文件或目录,一旦删除,无法恢复。
常用参数:
-f:强制删除文件;
-i:删除之前先询问用户;
-r:递归处理目录;
-v:显示处理过程;
shell.rm('-rf','out/Release') //强制递归删除`out/Release目录`
- cp([options,] source_array, dest)
用来将一个或多个源文件或目录复制到指定的文件或目录
shell.cp('-R','stuff/','out/Release') //将`stuff/`中所有内容拷贝至`out/Release`目录
- cd
切换工作目录至指定的相对路径或绝对路径。cd..为返回上一级,cd-回到前一目录
shell.cd('lib') //进入`lib`目录
- ls
用来显示目标列表
ls(path.join('bundle', 'css/')).forEach(cssName => {
***
})
- sed([options,] search_regex, replacement, file_array)
将file_array中符合search_regex的内容替换为replacement,支持正则的捕获组自引用。一次处理一行内容,处理完成后把缓冲区内容送往屏幕,然后处理下一行,循环直至结束。
/* -i表示直接作用源文件 */
/* 将build_version字段替换为'v0.1.2' */
shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
- cat([options,] file [, file ...])
将一个或多个文件内容读入,指定一个文件时读入该文件,指定多个文件时将内容连接在一起读入。
网友评论