点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
背景
fe/midway项目的scripts目录下有很多shell脚本,用来项目的测试、构建、部署。这样做极大提高了项目自动化,方便项目对接到jenkins上。那么问题来了。node应用中是如何调用shell、python脚本的。
实现
Nodejs子进程模块提供了运行系统命令(child_process.exec)以及运行脚本文件(child_process.execFile)的API,我们可以通过小实例来了解这两个API。
运行系统命令
示例代码
// child_process/exec.jsvar exec = require('child_process').exec;var cmdStr = 'echo "child_process exec"';exec(cmdStr, function(err,stdout,stderr){if(err) {console.log('error:'+stderr);} else {console.log(stdout);}});
执行结果
运行脚本文件
编写脚本 scripts/shell/test.sh
#!/bin/bashecho "shell run in node app"
注意:
保存后一定要执行 chmod +x scripts/shell/test.sh ,将文件变成可执行文件
调用脚本
// execFile.jsvar execFile = require('child_process').execFile;var path = require('path');execFile(path.join(__dirname, '../scripts/shell/test.sh'),function (err, stdout, stderr) {if(err) {console.log('error:'+stderr);} else {console.log(stdout);}});
执行结果
提升
我们可以将上面的执行命令放入到package.json中的scripts下,下次运行的时候我们只要输入命令 npm run xxx就能满足我们的需求。
但项目脚本比较多的时候,我们就需要一个公共执行脚本工具,来统一管理和运行脚本。
scripty就是这样一个工具,让我们在项目中只要按照一定文件目录规律关注我们的脚本书写,以及按照固定格式写package.json文件中scripts的命令即可,不用我们去关注脚本如何去更平稳的调用。
使用步骤
安装依赖
npm install script --save-dev
具体使用
scripty使用的时候,脚本所在目录路径和命令之间关联,这样方便书写和管理对应脚本。
首先在项目根目录下创建scripts文件夹
如果想定义命令”npm run foo:far”,那么你要创建一个可执行bar.sh文件在项目的scripts/foo目录下
在项目 package.json中的scripts中定义命令”foo:bar”: “scripty” 。(“scripty”是固定不变的)
这样你就可以在项目中直接运行npm run foo:bar ,然后scripty依赖就会自动执行项目中scripts/foo/bar.sh脚本。
总结
1、系统命令、脚本都可以使用child_process模块提供的API来运行。
2、python 脚本的运行,可以使用exec(‘python yourPython.py arg1 arg2’, cb )。
3、使用scripty依赖,可以方便我们管理和维护项目的脚本。
参考文章:
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
child_process
scripty