shelljs前端自动化

·  阅读 1878
shelljs前端自动化

场景

在开发过程中,常会遇到如下命令:

git add .
git commit -m '*****'
git push 
复制代码

Shelljs

这个库能够让我们在js文件中执行shell命令。shelljs做的事就是自动化,从耗时的重复性常规动作里解放出来,提升开发效率和工作心情。

1.Installing
$ npm install  shelljs -D
复制代码
2. 在根目录下新建文件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为例,区分开发和生产环境:

// 运行命令环境 用于config区分开发和生成环境
const shell = require('shelljs')
const apiEnv = process.env.API_ENV
shell.cp(`./src/config/${apiEnv}.js`, './src/config/index.js')
复制代码

image.png

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);
}

复制代码
  • 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 ...])

将一个或多个文件内容读入,指定一个文件时读入该文件,指定多个文件时将内容连接在一起读入。

shelljs-npm

shelljs官方文档

shelljs-github

shelljs中文文档介绍

分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改