shelljs
最后更新于:2022-04-02 06:52:46
## [shelljs](https://www.npmjs.com/package/shelljs)
`shelljs`模块重新包装了`child_process`,调用系统命令更加简单。
`shelljs`是`Unix Shell`在`Node.js API`层的轻量级实现,可以支持`Windows、Linux、OS X`。你可以像在`Unix`命令行敲命令一样书写代码
[TOC]
### shelljs的安装
`shelljs`是第三方模块,需要安装后才能使用。
* 全局安装
~~~
$ npm install shelljs -g
~~~
* 本地安装
将当前工作目录切换为需要使用`shelljs`模块的目录(已经创建了`package.json`文件的目录)
~~~
$ npm install shelljs --save
~~~
### shelljs的使用说明
对于熟悉`Unix Shell`脚本的开发者,简单扫一眼API就能愉快的开始写代码了。不熟悉的也没关系,`shelljs`绝大部分命令都是对文件和文件夹的操作,我们在[文件系统处理](313189)一节已经详细的将对文件系统处理相关的接口介绍了一遍,使用`fs-extra`模块处理文件系统相关的操作会简单很多,
先看个例子:
~~~
var shell = require('shelljs');
//判定git命令是否可用
if (!shell.which('git')) {
//向命令行打印git命令不可用的提示信息
shell.echo('Sorry, this script requires git');
//退出当前进程
shell.exit(1);
}
//先删除'out/Release'目录
shell.rm('-rf', 'out/Release');
//拷贝文件到'out/Release'目录
shell.cp('-R', 'stuff/', 'out/Release');
//切换当前工作目录到'lib'
shell.cd('lib');
//shell.ls('*.js')返回值是一个包含所有js文件路径的数组
shell.ls('*.js').forEach(function(file) {//遍历数组
//sed命令用于文件内容的替换,这里是对每个文件都执行如下3步操作,更改版本信息
shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file);
});
//切换当前工作目录到上一层
shell.cd('..');
//同步执行git命令提交代码
if (shell.exec('git commit -am "Auto-commit"').code !== 0) {
shell.echo('Error: Git commit failed');
shell.exit(1);
}
~~~
上面的例子展示了一个可发布版本提交到`git`仓库的过程。
`shelljs`的方法都遵循:
**方法名就是我们常用的执行命令,而方法参数就是命令行参数。只是有些方法对命令行参数做了变形和拓展。**
### 重要方法介绍
#### exec()
* exec(command [, options] [, callback])
* `command
`:要在命令行执行的完整命令
* `options
';