一種編程語言是否易用,很大程度上,取決于開發命令行程序的能力。
Node.js 作為目前最熱門的開發工具之一,怎樣使用它開發命令行程序,是 Web 開發者應該掌握的技能。
下面就是我在它的基礎上擴展的教程,應該是目前最好的解決方案了。
一、可執行腳本
我們從最簡單的講起。
首先,使用 JavaScript 語言,寫一個可執行腳本 hello 。
#!/usr/bin/env nodeconsole.log('hello world');然后,修改 hello 的權限。
$ chmod 755 hello
現在,hello 就可以執行了。
$ ./hellohello world
如果想把 hello 前面的路徑去除,可以將 hello 的路徑加入環境變量 PATH。但是,另一種更好的做法,是在當前目錄下新建 package.json ,寫入下面的內容。
{ "name": "hello", "bin": { "hello": "hello" }}然后執行 npm link 命令。
$ npm link
現在再執行 hello ,就不用輸入路徑了。
$ hellohello world
二、命令行參數的原始寫法
命令行參數可以用系統變量 process.argv 獲取。
下面是一個腳本 hello 。
#!/usr/bin/env nodeconsole.log('hello ', process.argv[2]);執行時,直接在腳本文件后面,加上參數即可。
$ ./hello tomhello tom
上面代碼中,實際上執行的是 node ./hello tom ,對應的 process.argv 是 ['node', '/path/to/hello', 'tom'] 。
三、新建進程
腳本可以通過 child_process 模塊新建子進程,從而執行 Unix 系統命令。
#!/usr/bin/env nodevar name = process.argv[2];var exec = require('child_process').exec;var child = exec('echo hello ' + name, function(err, stdout, stderr) { if (err) throw err; console.log(stdout);});用法如下。
$ ./hello tomhello tom
四、shelljs 模塊
shelljs 模塊重新包裝了 child_process,調用系統命令更加方便。它需要安裝后使用。
npm install --save shelljs
然后,改寫腳本。
#!/usr/bin/env nodevar name = process.argv[2];var shell = require("shelljs");shell.exec("echo hello " + name);上面代碼是 shelljs 的本地模式,即通過 exec 方法執行 shell 命令。此外還有全局模式,允許直接在腳本中寫 shell 命令。
require('shelljs/global');if (!which('git')) { echo('Sorry, this script requires git'); exit(1);}mkdir('-p', 'out/Release');cp('-R', 'stuff/*', 'out/Release');cd('lib');ls('*.js').forEach(function(file) { sed('-i', 'BUILD_VERSION', 'v0.1.2', file); sed('-i', /.*REMOVE_THIS_LINE.*/n/, '', file); sed('-i', /.*REPLACE_LINE_WITH_MACRO.*/n/, cat('macro.js'), file);});cd('..');if (exec('git commit -am "Auto-commit"').code !== 0) { echo('Error: Git commit failed'); exit(1);}
新聞熱點
疑難解答
圖片精選