麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

詳解如何實現一個簡單的Node.js腳手架

2019-11-19 14:47:47
字體:
來源:轉載
供稿:網友

原因

在工作中,需要開發一個腳手架,用于給相關用戶提供相關的開發便利性。

適合人群

對前端、Node操作有一定的了解,同時向了解腳手架開發過程或者需要自己實現一個腳手架的開發者。

目標

  1. 開發一個簡單的腳手架,能夠提供給用戶進行安裝。
  2. 能夠輸出相關提示。
  3. 對用戶文件進行讀寫操作。
  4. 在腳手架中使用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庫來快速實現需求。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 97干在线 | 精品一区二区三区免费毛片爱 | 精品成人av一区二区在线播放 | 激情网站免费观看 | 日韩美女电影 | 免费毛片观看 | 久久成人动漫 | 国产日产精品久久久久快鸭 | 成人在线视频一区 | 国产精品999在线观看 | 青草av.久久免费一区 | 欧美极品免费 | 久久精品视频网站 | 欧美成人精品一级 | 国产亚洲综合一区二区 | 12av毛片| 一级α片免费看刺激高潮视频 | 久久91精品 | 国产精品成人久久久久a级 欧美特黄一级高清免费的香蕉 | 成人精品久久 | 精品国产一区在线 | 久久资源总站 | wwwxxx国产| 欧美激情在线播放 | 久久国产精品免费视频 | 91成人久久 | 久久亚洲线观看视频 | 黄色的视频免费观看 | 深夜福利视频免费观看 | 欧美成人一区二区视频 | 激情综合在线观看 | 国产91大片| 国产精品视频一区二区三区四区国 | 精品国产一区二区久久 | 369看片你懂的小视频在线观看 | 91九色视频观看 | 一级毛片在线观看视频 | 久久成人亚洲 | 91精品国产99久久久久久 | 九九热视频免费在线观看 | 在线2区 |