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

使用yeoman構(gòu)建angular應(yīng)用的方法

 更新時間:2017年08月14日 07:59:29   投稿:jingxian  
下面小編就為大家?guī)硪黄褂脃eoman構(gòu)建angular應(yīng)用的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文將介紹如何親手來完成一個yeoman的generator,以實現(xiàn)快速構(gòu)建最適合自己的項目。
本文將實現(xiàn)的generator起名為ngtimo,依照yeoman的命名規(guī)矩就叫做generator-ngtimo,是筆者這周末一晚上加一上午參考著yeoman官方給出的幾個generator(generator-generator、generator-node)給強行催生出來的,目前也已經(jīng)在github上托管并發(fā)布到npm。

實現(xiàn)效果

首先確保已經(jīng)全局安裝了yeoman,然后再全局安裝generator-ngtimo:

npm install -g generator-ngtimo

安裝完成后即可使用yo命令來進行構(gòu)建:

yo ngtimo

然后順利的話yeoman會像下面這樣詢問一系列構(gòu)建的配置,這里筆者選擇輸入項目名稱為ng-test剩下的一路敲回車:

順利的話如下圖這樣的項目結(jié)構(gòu)就誕生了,可以 cd 到項目目錄下(自動執(zhí)行的 npm install 失敗的話再手動
npm install 一下),并運行 npm run server 啟動項目查看效果。

如果只是想要使用yeoman來快速進行項目搭建的話,只需要找到一個喜歡的generator,像上文這樣全局安裝然后yo它就可以了!不過只是使用別人的generator會有些不自由而且考驗對方的維護能力,就像筆者這個一時興起的ngtimo就才剛剛有了一個主模板而已,還需要做很多改進和迭代。

如果想要自己來編寫一個generator其實難度也非常小,yeoman官方甚至給出了一個generator-generator來幫助我們創(chuàng)建一個generator,筆者這個不成器的ngtimo也是yo generator給yo出來然后加以養(yǎng)成的 :)。

yeoman generator基本項目結(jié)構(gòu)

不想自己從零開始寫一個generator的話強烈推薦使用yeoman官方的generator-generator先把基本結(jié)構(gòu)構(gòu)建出來:

npm install -g generator-generator
yo generator

yeoman的generator說白也只是一個npm包,主要依賴yeoman-generator包來制定構(gòu)建規(guī)則,這里給出ngtimo的基本目錄結(jié)構(gòu):

構(gòu)建規(guī)則

現(xiàn)在主要著眼于generators/app/index.js,此文件是最主要的角色,定義了ngtimo要如何處理模板,如何與用戶交互等。筆者目前也只是照著比較成熟的generator在使用,存在片面之處還請包涵。

總覽index.js

整個index.js將導(dǎo)出一個擴展了yeoman-generator的類,就像這樣:

const Generator = require('yeoman-generator');
// ...
module.exports = class extends Generator {
 prompting() {
  // ...
 }
 default() {
  // ...
 }
 writing() {
  // ...
 }
 install() {
  // ...
 }
}

內(nèi)部的這四個方法各有用處。

一、prompting方法

用于與用戶進行交互,即在yo項目的時候,這老頭會啰啰嗦嗦問我們很多問題,這些問題就是在這里配置的。

對于這個方法筆者選擇的套路是如下三部曲:

先讓老頭向用戶問聲好

const yosay = require('yosay');
// ...
this.log(yosay(
 'Welcome to the astonishing ' + chalk.red('generator-ngtimo') + ' generator!'
));

以上代碼效果就是老頭會代我們問候(褒義)一下用戶:

把一連串問題先配置好

const prompts = [{
 type: 'input',
 name: 'appName',
 message: 'Your project name(你的項目名稱)',
 default: this.appname
}, {
 type: 'confirm',
 name: 'addCommon',
 message: 'Would you like to add some common code(include CoreModule, SharedModule, Router)?\n(要自動創(chuàng)建額外的常用內(nèi)容嗎, 包含了核心模塊、共享模塊和路由能力)',
 default: true
}];

這里就列舉了兩類問題,一類是客觀題,讓用戶輸入要構(gòu)建的項目名稱,另一類是判斷題,詢問用戶是否添加一些額外的常用代碼,還有一類沒有使用到的是選擇題,還蠻有趣的。

把這個問題數(shù)組返回給老頭

問題數(shù)組配置好了,現(xiàn)在要把它交給老頭保管,做法如下:

return this.prompt(prompts).then(props => {
 // 用戶交互完成后把得到的配置設(shè)置到參數(shù)中
 this.props = props;
});

效果就是當(dāng)用戶做完這些題目后回答會配置給props變量,在后面的寫如內(nèi)容環(huán)節(jié)就可以根據(jù)用戶的答案來有選擇的創(chuàng)建項目了。

二、default方法

筆者一開始沒有配置這個方法,是在測試構(gòu)建時發(fā)現(xiàn)沒辦法給目標(biāo)項目套一個頂層目錄時參考官方generator加上的,猜測是可以用來執(zhí)行一些默認(rèn)行為,比如自動給目標(biāo)項目創(chuàng)建一個頂層目錄,像這樣:

const path = require('path');
const mkdirp = require('mkdirp');
// ...
default() {
 if (path.basename(this.destinationPath()) !== this.props.appName) {
  this.log(
   '發(fā)現(xiàn)你不是在 ' + this.props.appName + ' 目錄下構(gòu)建\n' +
   '我將主動創(chuàng)建此目錄.(created folder with app name)'
  );
  mkdirp(this.props.appName);
  this.destinationRoot(this.destinationPath(this.props.appName));
 }
}

三、writing方法

此方法即用來把實際項目按照指定規(guī)則給寫出來,主要有兩種寫法: 直接復(fù)制指定模板以及傳入?yún)?shù)渲染出目標(biāo)文件。

方式一: 直接拷貝

this.fs.copy(
this.templatePath('模板位置'),
this.destinationPath('目標(biāo)位置')
);

方式二: 傳入?yún)?shù)渲染模板

this.fs.copyTpl(
this.templatePath('模板位置'),
this.destinationPath('目標(biāo)位置'),
{

參數(shù)名: 值
}
);

比如說,在index.js的同級目錄下的templates目錄下有一個文件叫text.txt, 使用方法一將模板位置和目標(biāo)位置都寫text.txt,老頭就會直接復(fù)制這個text.txt作為輸出;而如果使用方法二,模板位置和目標(biāo)位置不變,并傳入?yún)?shù){ hello: '你好啊'},在text.txt中就使用ejs語法寫上<%=hello%>,最終老頭同樣會輸出一個test.txt文件,不一樣的是里面的內(nèi)容被渲染成了"你好啊"。

對此方法的總結(jié)就是根據(jù)需要使用copy或copyTpl進行輸出,其中copyTpl中的渲染使用ejs語法進行,而模板文件就都放在index.js的同級templates目錄里邊。

四、install方法

此方法即用來自動執(zhí)行依賴的安裝,沒什么特別的,就是在構(gòu)建完成后自動幫你npm install和bower install,也可以禁用其中一種:

install() {
 this.installDependencies({bower: false});
}

效果就是下圖這句話了:

發(fā)布generator到npm

發(fā)布之前可以先使用npm link映射到本地進行測試:

npm link
yo ngtimo

確認(rèn)無誤后,發(fā)布流程就是一句代碼的事(記得定好版本,且更新發(fā)布時記得更新版本號):

npm publish

以上這篇使用yeoman構(gòu)建angular應(yīng)用的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳細(xì)談?wù)凙ngularJS的子級作用域問題

    詳細(xì)談?wù)凙ngularJS的子級作用域問題

    大家在使用angularjs的時候,很容易忽略AngularJS自帶指令的作用域問題,有一些指令會產(chǎn)生獨立的自己作用域,造成子級無法與父級作用域雙向綁定的問題。下面我們來看看這些問題,有需要的可以參考借鑒。
    2016-09-09
  • 詳解AngularJS中自定義指令的使用

    詳解AngularJS中自定義指令的使用

    這篇文章主要介紹了詳解AngularJS中自定義指令的使用,包括結(jié)合自定義HTML標(biāo)簽的使用,需要的朋友可以參考下
    2015-06-06
  • AngularJS 事件發(fā)布機制

    AngularJS 事件發(fā)布機制

    這篇文章主要介紹了AngularJS 事件發(fā)布機制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • AngularJS 入門教程之事件處理器詳解

    AngularJS 入門教程之事件處理器詳解

    本文主要介紹AngularJS 事件處理器,這里整理了相關(guān)資料和示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • AngularJS中控制器函數(shù)的定義與使用方法示例

    AngularJS中控制器函數(shù)的定義與使用方法示例

    這篇文章主要介紹了AngularJS中控制器函數(shù)的定義與使用方法,結(jié)合具體實例形式分析了AngularJS控制器函數(shù)的定義、綁定及相關(guān)使用技巧,需要的朋友可以參考下
    2017-10-10
  • 快速學(xué)習(xí)AngularJs HTTP響應(yīng)攔截器

    快速學(xué)習(xí)AngularJs HTTP響應(yīng)攔截器

    任何時候,如果我們想要為請求添加全局功能,例如身份認(rèn)證、錯誤處理等,在請求發(fā)送給服務(wù)器之前或服務(wù)器返回時對其進行攔截,是比較好的實現(xiàn)手段
    2015-12-12
  • 關(guān)于angularJs指令的Scope(作用域)介紹

    關(guān)于angularJs指令的Scope(作用域)介紹

    下面小編就為大家?guī)硪黄猘ngularJs指令的Scope(作用域)介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • AngularJS動態(tài)綁定HTML的方法分析

    AngularJS動態(tài)綁定HTML的方法分析

    這篇文章主要介紹了AngularJS動態(tài)綁定HTML的方法,結(jié)合實例形式分析了AngularJS實現(xiàn)動態(tài)綁定HTML的相關(guān)操作指令用法與使用注意事項,需要的朋友可以參考下
    2016-11-11
  • AngularJS入門教程之鏈接與圖片模板詳解

    AngularJS入門教程之鏈接與圖片模板詳解

    本文主要介紹 AngularJS 鏈接與圖片模板的知識,這里整理了相關(guān)資料及示例代碼,有興趣的小伙伴可以參考下
    2016-08-08
  • Angular ng-repeat指令實例以及擴展部分

    Angular ng-repeat指令實例以及擴展部分

    這篇文章主要為大家詳細(xì)介紹了Angular ng-repeat指令實例以及擴展部分,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論

汉源县| 江源县| 黄平县| 淅川县| 柞水县| 年辖:市辖区| 吴堡县| 藁城市| 甘洛县| 汉寿县| 壶关县| 峡江县| 合水县| 长岛县| 达孜县| 鄂托克旗| 克山县| 临武县| 亳州市| 通渭县| 灵丘县| 金乡县| 潮安县| 延安市| 屯门区| 皮山县| 民勤县| 前郭尔| 凤庆县| 涿鹿县| 溧阳市| 霍山县| 衡水市| 石棉县| 阳城县| 留坝县| 莱阳市| 灵寿县| 博乐市| 郎溪县| 洞口县|