最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解用node編寫自己的cli工具

 更新時間:2017年05月23日 08:29:14   作者:huanglei-  
這篇文章主要介紹了詳解用node編寫自己的cli工具,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

工作中接到新項目,開發(fā)前都需要先規(guī)劃項目目錄,然后一個個創(chuàng)建文件,搭建sass編譯環(huán)境,下載jquery,Swiper等類庫... 這些準備工作都要花上不少時間。每做一個項目,都會遇到同樣的問題,再重復(fù)一遍嗎?
是時候做點改變了:編寫自己的cli工具,一行命令,3秒鐘進入coding狀態(tài)!

本文以自己的my-cli為例,將開發(fā)到發(fā)布過程完整記錄下來,看完本文,你將學會如何從零開發(fā)一個cli項目,如何上傳到github庫,以及如何使用npm發(fā)布自己的包。

準備

開發(fā)一個cli工具前首先要想好它能做什么。以我自己為例,我需要一個工具,讓我能只輸入一行命令就幫我快速搭建好項目結(jié)構(gòu),就像這樣:


是不是很炫酷?放心,很簡單。

開始

首先創(chuàng)建你的cli項目,并使用npm init創(chuàng)建一個package.json。

$ mkdir my-cli && cd my-cli
$ npm init

根據(jù)提示一步步創(chuàng)建好package.json。name屬性就是你發(fā)布到npm上的名字,這個是不能與npm上現(xiàn)有項目重名的,一個小技巧是使用npm install下載你想要起的包名字,如果報錯404,那么你的包名是可用的。最后創(chuàng)建好的package.json文件像這樣子:

{
 "name": "my-cli",
 "version": "0.0.1",
 "description": "Auto generate project template",
 "main": "index.js",
 "bin": {
  "my-cli": "./index.js"
 },
 "repository": {
  "type": "git",
  "url": "git+https://github.com/hlme/my-cli.git"
 },
 "keywords": [
  "cli"
 ],
 "author": "798400626@qq.com",
 "license": "MIT",
 "bugs": {
  "url": "https://github.com/hlme/my-cli/issues"
 },
 "homepage": "https://github.com/hlme/my-cli#readme"
}

編寫可執(zhí)行文件

package.json中有一個"bin"字段,配置后才可以在控制臺使用你的命令。

"bin": {
 "my-cli": "./index.js"
}

我們配置了"my-cli"命令來執(zhí)行index.js文件。用你喜歡的編輯器,在項目主目錄下創(chuàng)建一個index.js文件。


注意第一行的"#! node"很重要,表示用node來執(zhí)行這個文件。如果沒有這句聲明,就會在記事本中打開index.js文件。

全局安裝你的包

使用 npm install -g 將你當前的項目安裝到全局環(huán)境,現(xiàn)在你可以在命令行使用"my-cli"命令了。

用fs模塊快速生成項目模板

我們自定義的指令可以執(zhí)行了,接下來編寫代碼實現(xiàn)功能。my-cli的主要功能就是生成項目模板,一個思路是用一個templates文件夾保存項目模板,然后通過fs.mkdir()來創(chuàng)建項目目錄,最后把文件從templates文件夾拷貝到項目中去。

var fs = require('fs');
var path = require('path');

function copyTemplate (from, to) {
 from = path.join(__dirname, 'templates', from);
 write(to, fs.readFileSync(from, 'utf-8'))
}
function write (path, str, mode) {
 fs.writeFileSync(path, str)
}
function mkdir (path, fn) {
 fs.mkdir(path, function (err) {
  fn && fn()
 })
}

核心代碼就這么點,是不是非常簡單?

整個項目文件結(jié)構(gòu)差不多就這個樣子,把你需要的文件放到templates文件夾,然后用copyTemplate方法將文件拷貝到項目目錄下。

創(chuàng)建文件目錄和拷貝文件的過程,代碼看著比較丑陋

接收命令行參數(shù)

平常我們使用命令行工具時都會用到參數(shù),如 webpack -p, express -e 等,現(xiàn)在我們來為自己的cli添加接收命令行參數(shù)的功能。為my-cli設(shè)計四個參數(shù),用來向項目中添加類庫。

$ my-cli -j -s -v -b
//-j :添加jQuery
//-s :添加Swiper
//-v :添加Vue
//-b :添加Bootstrap

使用commander包可以簡化解析參數(shù)過程,但是本項目比較簡單,我也不想額外引入其他的包了,處理一些簡單的參數(shù)其實并不難。

node中我們可以使用process.argv來獲取命令行參數(shù),process.argv是一個參數(shù)數(shù)組,第一項為node.exe的絕對路徑,第二項為執(zhí)行該js的絕對路徑,使用process.argv.slice(2)即可獲取輸入的參數(shù)數(shù)組。


通過遍歷參數(shù)數(shù)組來檢查命令中輸入了哪些參數(shù)。如果輸入了預(yù)設(shè)的參數(shù),就為config對象添加對應(yīng)的屬性,在生成文件時根據(jù)onfig判斷是否將模板文件拷貝到項目中。繼續(xù)丑陋的代碼:


本地運行

至此我們的項目已經(jīng)基本完成了,使用 npm install -g 將項目安裝到全局環(huán)境,然后新建一個項目文件夾,使用my-cli命令來生成項目模板。

發(fā)布到npm倉庫

要想將自己的包發(fā)布到npm上,首先得有一個npm賬號,創(chuàng)建賬號非常簡單,輸入npm adduser,簡單三步即可完成創(chuàng)建。


創(chuàng)建好user后,使用npm publish即可將當前項目發(fā)布到npm上了,以后就可以使用npm install -g my-cli 來安裝你的cli工具。

結(jié)束語

相信大家看完本文后知道如何根據(jù)自己的需求制作cli工具了。本文中的my-cli比較簡單,權(quán)當做拋磚引玉。如果想查看完整源碼或者使用這個工具,可以戳這里:github地址。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • express的中間件basicAuth詳解

    express的中間件basicAuth詳解

    這篇文章主要介紹了node.js中express的中間件basicAuth的使用方法,需要的朋友可以參考下
    2014-12-12
  • 一步步教你使用node搭建一個小頁面

    一步步教你使用node搭建一個小頁面

    最近使用NodeJs搭建的小型web應(yīng)用,所以下面這篇文章主要給大家介紹了關(guān)于使用node搭建一個小頁面的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)

    詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)

    這篇文章主要介紹了詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • M2實現(xiàn)Nodejs項目自動部署的方法步驟

    M2實現(xiàn)Nodejs項目自動部署的方法步驟

    這篇文章主要介紹了M2實現(xiàn)Nodejs項目自動部署的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • NestJS系列核心概念之Module模塊示例詳解

    NestJS系列核心概念之Module模塊示例詳解

    這篇文章主要為大家介紹了NestJS系列核心概念之Module模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Node+Express+MongoDB實現(xiàn)登錄注冊功能實例

    Node+Express+MongoDB實現(xiàn)登錄注冊功能實例

    這篇文章主要介紹了Node+Express+MongoDB實現(xiàn)登錄注冊功能,需要的朋友可以參考下
    2017-04-04
  • Node.js下自定義錯誤類型詳解

    Node.js下自定義錯誤類型詳解

    在JavaScript里面,運行過程中的錯誤的類型總是被人忽略,這篇文章給大家詳細介紹了如何在Node.js下自定義錯誤類型,對大家學習或者使用Node.js具有一定的參考借鑒價值,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • 詳解前端任務(wù)構(gòu)建利器Gulp.js使用指南

    詳解前端任務(wù)構(gòu)建利器Gulp.js使用指南

    這篇文章主要介紹了前端任務(wù)構(gòu)建利器Gulp.js使用指南,對Gulp.js感興趣的同學,可以參考下
    2021-04-04
  • Node.js使用WebAssembly

    Node.js使用WebAssembly

    本文主要介紹了Node.js使用WebAssembly,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • NodeJS爬蟲實例之糗事百科

    NodeJS爬蟲實例之糗事百科

    本篇文章主要給大家講解了一下用NodeJS學習爬蟲,并通過爬糗事百科來講解用法和效果,一起學習下吧。
    2017-12-12

最新評論

宁都县| 沂水县| 赫章县| 自治县| 西林县| 庆阳市| 普宁市| 阿合奇县| 南丹县| 关岭| 乌兰察布市| 山西省| 烟台市| 营山县| 田阳县| 雷波县| 壤塘县| 高尔夫| 喀喇沁旗| 怀远县| 北海市| 苍梧县| 东源县| 临湘市| 芦溪县| 洛阳市| 上蔡县| 柘荣县| 香河县| 乌兰县| 清镇市| 凌云县| 满洲里市| 板桥市| 武穴市| 根河市| 宾川县| 建阳市| 河北区| 开平市| 阿合奇县|