3 回答

TA貢獻2037條經驗 獲得超6個贊
創建項目:
新建一個文件夾,假設我們取名為tbjnode
cd tbjnode
然后初始化項目
npm init
現在,我們需要修改 package.json 文件
1:刪除main入口
2:添加preferGlobal設為true:該選項會提示用戶全局安裝
3:添加bin對象,用于建立索引:比如執行tbjname相當于執行index.js
修改后的package.json如下:
{
"name": "tbjnode",
"version": "1.0.3",
"description": "tbj node project cli",
"preferGlobal": true,
"keywords": [
"file",
"search"
],
"bin": {
"filesearch": "index.js"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "zhishui",
"license": "ISC"
}
bin下的filesearch用來指定filesearch命令執行的文件為index.js
使用 npm link ,綁定全局,不用重新安裝。
好了,現在我們開始寫一個功能,用來查詢某個文件夾下是否有指定的文件。
我們新建一個 index.js
編寫如下代碼:
#!/usr/bin/env node
var exec = require('child_process').exec;
// 獲取用戶輸入內容
var userArgv = process.argv.slice(2);
var searchPath = userArgv[0];
var searchFile = userArgv[1];
var commond = "find ";
// 判斷用戶輸入是否錯誤
if(userArgv.length !=2) {
console.log("input commond link this 'filesearch filepath filename'");
} else {
commond += searchPath + ' -iname '+ searchFile;
var child = exec(commond, function(err, stdout, stderr) {
if(err) {
throw err;
}
console.log(stdout);
});
}
ok。現在開始測試一下: filesearch ./ package.json 。就可以看到結果了。
但是現在TJ大神也做了一個特別酷的工具。 commander
API地址: commander API
舉例一個example:
新建一個文件 testCommander.js
然后在bin里,添加一個索引。
bin: {
"filesearch": "index.js",
"testC": "testCommander.js"
}
在 testCommander.js 寫入以下代碼:
#!/usr/bin/env node
var program = require('commander');
program
.version('0.0.1')
.option('-C, --chdir <path>', 'change the working directory')
.option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
.option('-T, --no-tests', 'ignore test hook')
program
.command('setup')
.description('run remote setup commands')
.action(function() {
console.log("setup");
});
program.parse(process.argv);
執行 testC -h ,就可以看到命令行結果。
commander這里主要用了五個接口:
1. version: 設定版本號
2. option: 對該命令介紹以及一些參數的執行
3. command: 新增一個子命令,執行``testC setup``
4. description: 對該命令的描述
5. action: 該子命令的要執行的操作。
其他的操作請查看該文檔接口。
添加回答
舉報