系列文章:html
WTF 不知道腳手架是啥? 那抓緊惡補一下前端基礎把兄die, 相信不久的之後你就會回來的.前端
ps: 本文文件操做基於 bash, mac 同窗直接用 terminal 或 iterm 便可, win 用戶推薦使用 git bashvue
腳手架, 源自於建築行業, 通俗的講就是一個項目搭建的工具. 比較熟知的有 vue-cli
create-react-app
等等, 這類工具一般以 xxx-cli 命名, 不廢話 先甩一個 npm 戰績 node
小哥哥, 看看這數據, 你到底要仍是不要嘛... react
==================== 分割線 ====================git
光說不練假把式, 第一步咱們先跑一個本身的 node 命令github
首先建立一個項目目錄, 根據慣例, 咱們的腳手架也叫 cli, 就叫 learn-cli
吧, 好好學習, 每天向上vue-cli
mkdir learn-cli
複製代碼
而後, 直接 npm init -y
建立一個 node 項目shell
cd learn-cli
npm init -y
複製代碼
用你喜歡的編輯器, 打開 learn-cli
目錄, 推薦 vscode, 在 package.json 中添加代碼npm
"bin": {
"learn": "./bin/learn.js"
},
複製代碼
建立 bin 目錄和 learn.js 文件, 在 learn.js 中添加如下代碼. 文件頭部的 #!/usr/bin/env node
這一句是告訴 shell 要以 node 來解析接下來的 learn 文件. 剩下的就是咱們熟悉的 js 啦 ^ - ^
#!/usr/bin/env node
console.log('好好學習, 每天向上')
複製代碼
經過終端進入到項目的根目錄執行 npm link
若是出現一下提示說明 link 成功
這個命令的做用其實就是添加了兩個軟鏈(win 用戶能夠理解爲快捷方式)到系統的環境變量下. 此時, 在命令行中輸入 learn 試一下
哈哈哈哈, 熟悉的名言就這麼出來啦, 出來啦....
咱們能夠經過 process.argv 獲取到啓動 node 進程時傳入的命令行參數
調整 learn.js 文件爲以下:
#!/usr/bin/env node
console.log(process.argv[2] + '好好學習, 每天向上')
複製代碼
再次回到終端執行 learn 圈圈
, 便可獲得如下輸出, 關於爲何要用 process.argv[2] 請參閱 文檔
使用原生的方式能夠獲取到傳入的參數, 可是這種方式更適合簡單的演示項目, 在這裏咱們選用社區優選的 commander 來處理參數問題, 別問我爲何這麼用, 就是爲了兩個字 ------- 裝逼
先上一個官方的栗子
#!/usr/bin/env node
const 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
.command('exec <cmd>')
.description('run the given remote command')
.action(function(cmd) {
console.log('exec "%s"', cmd);
});
program
.command('teardown <dir> [otherDirs...]')
.description('run teardown commands')
.action(function(dir, otherDirs) {
console.log('dir "%s"', dir);
if (otherDirs) {
otherDirs.forEach(function (oDir) {
console.log('dir "%s"', oDir);
});
}
});
program
.command('*')
.description('deploy the given env')
.action(function(env) {
console.log('deploying "%s"', env);
});
program.parse(process.argv);
複製代碼
首先, 安裝 commander
npm i commander -S
複製代碼
其次將官方示例粘貼到咱們的 learn.js 中, 隨便執行一個命令試試learn 圈圈
learn -V
, 就是這麼莫名其妙的好用了.
到目前爲止, 咱們已經完成了萬里長城第一步, 有興趣的小夥伴能夠本身嘗試一下下面的步驟喲 ^ _ ^.