【轉載】gulp minimist
今天在看gulp自動化部署相關的文章之時,看到了一個名詞minimist,比較迷惑所以搜尋了一下已做記錄
原文連結:http://jarvys.github.io/2014/06/01/minimist-js/
node.js的命令列引數解析工具有很多,比如:argparse、optimist、yars、commander。optimist和yargs內部使用的解析引擎正是minimist,如果你喜歡輕量級的技術,那麼minimist足夠簡單好用,程式碼量也很少(只有幾百行),非常適合研讀。
minimist的特性比較全面:
- short options
- long options
- Boolean 和 Number型別的自動轉化
- option alias
先看一下minimist整體的解析過程,程式碼大致是:
for (var i = 0; i < args.length; i++) {
var arg = args[i];
if (/^--.+=/.test(arg)) {
...
} else if (/^--no-.+/.test(arg)) {
...
} else if (/^--.+/.test(arg)) {
...
} else if (/^-[^-]+/.test(arg)) {
...
} else {
...
}
}
解析過程中,minimist會依次匹配不同的模式,從long options到short options,匹配之後再進行相應的解析工作。
我們可以寫一個簡單地例子來試試minimist:
// test.js
var args = require('minimist')(process.argv.slice(2));
console.log(args.hello);
$ node test.js --hello=world
// world
$ node test.js --hello world
// world
$ node test.js --hello
// true 注意:不是空字串而是true
從上面的例子可以看到,minimist和optimist一樣會把引數解析成一個字典。但是最後一次的值與前兩次不太一樣。去掉world
之後,hello
的值變成了true
。一般情況下,如果引數後面沒有跟著的value的話,minimist會把引數的值解析成true。不過,minimist在解析介面當中提供的string
選項來修改上面的解析過程。string
選項可以傳入一個陣列,陣列中的引數會被一直解析成字串。我們修改一下上面的test.js
var args = require('minimist')(process.argv.slice(2), {
string: ["hello"]
});
console.log(args.hello);
$ node test.js --hello world
// world
$ node test.js --hello
// ""
在string
選項當中新增了hello
之後,hello
的值會一直解析成字串,如果去掉了world
,那麼hello
將解析成空字串。
minimist還支援boolean
選項,與string
選項相反,在boolean
選項當中的引數,會被一直解析成true
或false
,比如下面的例子:
var args = require('minimist')(process.argv.slice(2), {
boolean: ["hello"]
});
console.log(args.hello);
console.log(args._);
$ node test.js --hello world
// true
// [ 'world' ]
$ node test.js
// false
// []
hello
將一直被解析成true
或false
,新增的world
會儲存到args
的_
選項裡面。
除了string
和boolean
以外,minimist還提供了default
和alias
兩個選項,分別用來設定預設值和option alias。
相關文章
- Gulp的代理轉發外掛
- gulp核心方法 - gulp篇
- gulp
- gulp與iframe
- gulp入門
- 詳解 Gulp4 和 Gulp3 的區別
- gulp使用gulp-file-include將header/footer引入頁面Header
- gulp使用指南
- gulp入門文件
- gulp 使用指南
- gulp技巧總結
- 前端工程化篇之 gulp 一文讓您輕鬆掌握gulp 【全套gulp原始碼註釋解析】前端原始碼
- 使用gulp搭建專案
- gulp完全安裝教程
- gulp壓縮檔案
- gulp個人總結
- gulp 生成 css-spriterCSS
- Gulp的安裝及用法
- gulp4增量編譯編譯
- gulp與webpack的區別Web
- 轉載方法
- [轉載] ebxmlXML
- 【轉載】ElasticsearchElasticsearch
- FPGA【轉載】FPGA
- 轉載AOP
- 前端工程構建之談:gulp3要不要升級到Gulp4前端
- semantic-ui@2.4.2 install: `gulp install`UI
- 20分鐘gulp快速入門
- Gulp壓縮報錯處理
- Gulp.task() 原始碼簡析原始碼
- vscode中執行gulp的taskVSCode
- 快速搭建gulp專案實戰
- 【轉載】RenderTransform特效ORM特效
- 轉載快取快取
- DataGridView使用 --轉載View
- Gulp4.0入門和實戰
- Webpack + gulp + babel-loader 配置踩坑WebBabel
- 使用gulp實現前端自動化前端