欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用node.js實(shí)現(xiàn)自動(dòng)生成前端項(xiàng)目組件的方法詳解

 更新時(shí)間:2017年07月12日 11:27:19   作者:bleach  
最近在學(xué)習(xí)用,基于nodejs的強(qiáng)大,我從原本的只寫(xiě)前端變成了寫(xiě)全棧。下面這篇文章主要給大家介紹了關(guān)于利用node.js實(shí)現(xiàn)自動(dòng)生成前端項(xiàng)目組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。

本文主要給大家介紹了關(guān)于利用node.js實(shí)現(xiàn)自動(dòng)生成前端項(xiàng)目組件的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:

腳本編寫(xiě)背景


寫(xiě)這個(gè)小腳本的初衷是,項(xiàng)目本身添加一個(gè)組件太繁瑣了,比如我想要去建立一個(gè)login的組件,那么我需要手動(dòng)去IDE中,創(chuàng)建index.js(組件出口文件),login.js(業(yè)務(wù)文件),login.html,login.less這四個(gè)文件。因?yàn)槊總€(gè)組件都有一些輸出的代碼,還要把之前組件的那幾行拷貝過(guò)來(lái),這種作業(yè)真的煩,于是乎寫(xiě)了一個(gè)小腳本去自動(dòng)完成這些功能。

PS:本腳本運(yùn)行環(huán)境是nodeV7以上,當(dāng)前時(shí)間2017/07,stable版本還是V6,最新的node版本為V8.1.3(LTS版本),如要運(yùn)行,請(qǐng)升級(jí)node版本為L(zhǎng)TS版本。

預(yù)期效果

在命令行輸入:node set login

在conponents文件夾下面自動(dòng)生成4個(gè)文件,并填寫(xiě)index.js , login.js的文件公共內(nèi)容。

如果輸入多層文件如: node set login/foo

則會(huì)先檢測(cè)conponents文件夾下是否存在login,如不存在,先創(chuàng)建login文件夾,然后創(chuàng)建foo的組件。本腳本主要使用nodejs的fs模塊來(lái)完成需求。

fs模塊
fs模塊用于對(duì)系統(tǒng)文件及目錄進(jìn)行讀寫(xiě)操作,本次主要用到的fs模塊的功能有:

  • fs.existsSync(path) 檢測(cè)文件夾是否存在,一個(gè)同步的API,只接受一個(gè)路徑參數(shù),當(dāng)前版本異步的廢棄了。
  • fs.mkdir(path,callback) 創(chuàng)建文件夾,異步,兩個(gè)必填參數(shù),路徑和回掉。
  • fs.readFileSync(path) 讀取文件,接受一個(gè)參數(shù),文件路徑。
  • fs.writeFile(path,data,callback) 寫(xiě)文件,接受三個(gè)參數(shù),文件路徑,向文件中寫(xiě)的數(shù)據(jù),回掉。

代碼實(shí)施

流程圖


async function creatCpt() {
 try {
  await exists(); // 檢測(cè)文件夾
  await readFile(); // 讀取模板內(nèi)容
  await writeFile(await readFile()); //寫(xiě)入組件
 }
 catch (err) {
  console.error(err);
 }
}

獲取命令行參數(shù)

node set login為例,想要?jiǎng)?chuàng)建一個(gè)login文件夾,首先先要獲取命令行當(dāng)中的login。在nodejs當(dāng)中,獲取命令行參數(shù)使用process.argv這條命令返回一個(gè)數(shù)組,第一個(gè)參數(shù)為nodejs.exe的應(yīng)用所在絕對(duì)路徑,第二個(gè)參數(shù)為當(dāng)前腳本所在的絕對(duì)路徑,之后所輸入的參數(shù)以空格分隔,如輸入node set aaa,得到:


檢測(cè)文件夾是否存在

let exists = function () {
 return new Promise((res) => {
  (async function () {
   for (let a of path) {
    fs.existsSync(basepath + a) ? basepath = `${basepath}${a}/` : await mkdir(a);
   }
   res(basepath);
  })()
 })
}

判斷是否存在文件夾,如果存在,重新拼接路徑繼續(xù)檢查,如不存在則生成文件夾。

創(chuàng)建文件夾

node set foo/bar


let mkdir = function (a) {
 return new Promise((res, rej) => {
  fs.mkdir(basepath + a, (err) => {
   if (err) rej(err);
   basepath = `${basepath}${a}/`
   res(basepath);
  });
 })
}

創(chuàng)建文件夾成功后,重新拼接路徑,以便于繼續(xù)查找。

讀取模板內(nèi)容

let reads = [`${basepath}cptTemp/index.js`, `${basepath}cptTemp/cptTemp.js`];//要讀取的文件

let readFile = function () {
 return new Promise((res) => {
  for (let a of reads) {
   let text = fs.readFileSync(a).toString();
   text = text.replace(/time/g, moment().format('YYYY/MM/DD'))
    .replace(/temp/g, name);
   file.push(text)
  }
  res(file);
 })
}


每個(gè)生成好的文件都需要一個(gè)創(chuàng)建的時(shí)間,及作者,包括文件的輸出,以及class等結(jié)構(gòu),這些都是比較公用的,把他們寫(xiě)在模板當(dāng)中,然后讀取出來(lái),替換其中的關(guān)鍵詞,如時(shí)間,組件名等。

生成文件并寫(xiě)入內(nèi)容

提前建立好要生成的文件和要讀取的文件。如:

let writes = [`${name}.js`, `${name}.html`, `${name}.less`, `index.js`];

let writeFile = function (file) {
 return new Promise((res, rej) => {
  (async function () {
   for (let a of writes) {
    await fs.writeFile(`${basepath}${a}`,
     a == writes[3] ? file[0] : a == writes[0] ? file[1] : '', (err) => {
      if (err) rej(err)
     })
   }
   res('succ');
  })()
 })
}

目前只寫(xiě)了2個(gè)要讀取的模板,在生成文件之后,會(huì)將模板中的內(nèi)容填充進(jìn)去。

總結(jié)

以上就完成了一個(gè)自動(dòng)生成前端項(xiàng)目組件的小腳本了,當(dāng)然,還可以繼續(xù)擴(kuò)充,比如這些組件其實(shí)還需要再到,組件管理的那個(gè)js中去注入,這些都可以用腳本完成,本文就到這里為止了。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

項(xiàng)目地址:https://github.com/jiwenjiang...

本地下載地址:http://xiazai.jb51.net/201707/yuanma/angularSeed(jb51.net).rar

相關(guān)文章

  • npm install卡住不動(dòng)的七種解決方法

    npm install卡住不動(dòng)的七種解決方法

    在Node.js開(kāi)發(fā)過(guò)程中,npm install 是安裝和管理項(xiàng)目依賴(lài)的關(guān)鍵命令,然而,有時(shí)我們會(huì)遇到 npm install 運(yùn)行卡住不動(dòng)的情況,本文將為你提供七種解決方案,幫助你順利進(jìn)行依賴(lài)安裝,需要的朋友可以參考下
    2024-07-07
  • node中http模塊的使用及執(zhí)行流程

    node中http模塊的使用及執(zhí)行流程

    http這個(gè)模塊的職責(zé)就是幫你創(chuàng)建編寫(xiě)服務(wù)器,接下來(lái)通過(guò)本文給大家介紹node中http模塊的使用及執(zhí)行流程,感興趣的朋友一起看看吧
    2021-09-09
  • 詳解node字體壓縮插件font-spider的用法

    詳解node字體壓縮插件font-spider的用法

    在本篇文章中給大家詳細(xì)講述了node字體壓縮插件font-spider的用法的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友參考下。
    2018-09-09
  • Node.js 如何利用異步提升任務(wù)處理速度

    Node.js 如何利用異步提升任務(wù)處理速度

    這篇文章主要介紹了Node.js 如何利用異步提升任務(wù)處理速度,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 配置node服務(wù)器并且鏈接微信公眾號(hào)接口配置步驟詳解

    配置node服務(wù)器并且鏈接微信公眾號(hào)接口配置步驟詳解

    這篇文章主要介紹了配置node服務(wù)器并且鏈接微信公眾號(hào)接口配置步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • 如何使用Node.js判斷png圖片是否存在透明像素

    如何使用Node.js判斷png圖片是否存在透明像素

    這篇文章主要給大家介紹了關(guān)于如何使用Node.js判斷png圖片是否存在透明像素的相關(guān)資料,文中將實(shí)現(xiàn)的原理以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • Node.js?使用?zlib?內(nèi)置模塊進(jìn)行?gzip?壓縮

    Node.js?使用?zlib?內(nèi)置模塊進(jìn)行?gzip?壓縮

    這篇文章主要介紹了Node.js?使用?zlib?內(nèi)置模塊進(jìn)行?gzip?壓縮,nodejs為我們提供了一個(gè)zlib內(nèi)置模塊,我們可以使用它其中的gzip方法來(lái)對(duì)傳遞的數(shù)據(jù)進(jìn)行壓縮,從而提高數(shù)據(jù)傳遞效率,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼

    Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼

    本篇文章主要介紹了Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-03-03
  • nodejs搭建本地http服務(wù)器教程

    nodejs搭建本地http服務(wù)器教程

    本篇文章主要介紹了nodejs搭建本地http服務(wù)器教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • node.js中的事件處理機(jī)制詳解

    node.js中的事件處理機(jī)制詳解

    相信接觸過(guò)編程的同學(xué)應(yīng)該都了解,在訪問(wèn)任何網(wǎng)頁(yè)的時(shí)候,會(huì)伴隨著許多的事件,例如點(diǎn)擊菜單,移動(dòng)鼠標(biāo)等等。那么node.js是如何處理的?下面通過(guò)這篇文章就來(lái)給大家詳細(xì)的介紹下node.js中的事件處理機(jī)制,有需要的朋友們可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11

最新評(píng)論