本篇文章主要介紹了如何?一個簡單的Node.js腳手架,希望大家對Node.js有更多的掌握。
在工作中,需要開發一個腳手架,用於給相關使用者提供相關的開發便利性。
適合人群
對前端、Node操作有一定的瞭解,同時向瞭解腳手架開發過程或者需要自己實現一個腳手架的開發人員。
目標
開發一個簡單的腳手架,能夠提供給使用者進行安裝。
能夠輸出相關提示。
對使用者檔案進行讀寫操作。
在腳手架中使用Shell指令碼。
步驟
開發腳手架
腳手架的開發最開始過程與普通的前端項目相同,需要一個入口檔案command.js和設定檔package.json。
與其他設定檔不同的是,需要在package.json檔案中加上一下一項:
{ ..., "bin": { "cm-cli": "command.js" }}
在設定檔中增加了此項後,只需要在設定檔根目錄下執行npm link命令,即可使用cm-cli --help命令來查看載入的cm-cli腳手架。
如果你發布了你的腳手架,那麼在其他使用者使用命令npm install -g cm-cli之後,便可以在全域下使用你的腳手架了。
對使用者進行提示
在對注釋和命令進行提示中,我們需要使用到commander包,使用npm install commander即可進行安裝。(如果NPM版本低於5,則需要添加--save參數保證更新package.json設定檔)。
commander是一個提供使用者命令列輸入和參數解析的強大功能。有需要的可以閱讀相關的庫文檔。在這裡我介紹兩個用的最多的方法。
option
能夠初始化自訂的參數對象,設定關鍵字和描述,同時還可以設定讀取使用者輸入的參數。具體用法如下:
const commander = require('commander');commander.version('1.0.0') .option('-a, --aaa', 'aaaaa') .option('-b, --bbb', 'bbbbb') .option('-c, --ccc [name]', 'ccccc') .parse(process.argv);if (commander.aaa) { console.log('aaa');}if (commander.bbb) { console.log('bbb');}if (commander.ccc) { console.log('ccc', commander.ccc);}
具體展示如下:
command
該方法能夠在命令列增加一個命令。使用者在執行此命令後,能夠執行回調中的邏輯。具體用法如下:
commander .command('init <extensionId>') .description('init extension project') .action((extensionId) => { console.log(`init Extension Project "${extensionId}"`); // todo something you need });
具體展示效果如下:
對使用者檔案進行讀寫操作
通過上面的步驟,我們已經能夠完成一個簡單的腳手架了。下面,我們需要讀取使用者配置,同時為使用者產生一些模板檔案。
讀取檔案
現在,我們需要讀取使用者的cm-cli.json設定檔來進行一些配置。
我們可以使用Node.js的fs檔案模組來對檔案進度讀操作,由於此處沒有太多痛點,因此略去。
寫入檔案模板
我們提前將模板檔案儲存體在CDN上,再根據本地讀取到的相關腳手架設定檔來進行模板的下載。
註:腳手架中讀取的路徑為使用者使用時當前路徑,因此沒有辦法將模板檔案儲存體在腳手架中進行讀取。
我們可以使用諸如request這種庫來協助我們進行檔案下載,簡化操作步驟。執行npm install request`即可進行安裝。
註:在檔案寫入時建議先判斷檔案是否存在,再進行覆蓋。
使用Shell指令碼
與Node.js提供的API函數來看,有些人更加傾向於使用Shell指令碼來進行檔案操作。幸運的是,我們也可以在我們的腳手架中引入node-cmd來啟用對Shell指令碼的支援。執行npm install node-cmd即可進行安裝。
具體樣本如下:
commander .command('init <extensionId>') .description('init extension project') .action((extensionId) => { id = extensionId; console.log(`init Extension Project "${extensionId}"`); cmd.get( ` mkdir -p static/${extensionId} mkdir tmp mkdir tmp/source-file mkdir tmp/build-file curl -o tmp/source-file/index.js https://xxxxxxxx.com?filename=index.js touch tmp/source-file/index.css curl -o tmp/build-file/server.js https://xxxxxxxx.com?filename=server.js curl -o tmp/build-file/router.js https://xxxxxxxx.com?filename=router.js curl -o tmp/build-file/package.json https://xxxxxxxx.com?filename=package.json cp tmp/source-file/* static/${extensionId} cp tmp/build-file/* ./ rm -fr tmp npm install `, (err, data) => { console.log(data) if (!err) { console.log('init success'); return; } console.error('init error'); }); });
我們可以快速的使用Shell指令碼來進行檔案夾的建立和檔案模板的下載。
腳手架想要在終端能夠快速執行,可以在package.json設定檔中增加相關欄位。
腳手架需要能夠讀取相關終端輸入,可以使用commander庫來快速開發。
腳手架需要能夠執行Shell指令碼,可以使用node-cmd庫來快速實現需求。
以上內容就是如何?一個簡單的Node.js腳手架,希望對大家有協助。