Grunt一輩子的好基友:yeoman


yeoman是什么

image

yeoman主要包含了三個工具:yo、grunt、bower。我們先看下這三個工具分別是做什么的:

  • yo:腳手架工具,主要作用是創建項目骨架(跟grunt-init有點像)。
  • grunt:構建工具,主要用來運行各種任務,比如文件壓縮、合並、打包等。
  • bower:主要用來做前端資源依賴管理,跟npm很像,區別在於:npm管理的是node模塊的依賴,bower管理的是前端資源的依賴,如css、javascript文件等。

yeoman是做什么的

現在我們已經知道yeoman里面又什么東西了,那么它在我們的項目開發中扮演了一個什么樣的角色呢?首先我們來看看官方對yeoman的定義:

MODERN WORKFLOWS FOR MODERN WEBAPPS

這句話其實比較抽象,很難一眼知道yeoman是做什么的。 我們注意里面的關鍵詞 workflow ,也就是說yeoman貫穿了前端項目開發的始終。

image

在用到yeoman的項目中,我們的工作流程一般是:

  1. 創建項目骨架:運行yo工具,通過各種yeoman-generator(模板)創建項目骨架。
  2. 下載前端資源:運行bower install,下載項目中依賴的前端資源,比如jQuery、bootstrap、angularjs等(非必要)
  3. 運行構建任務:運行grunt跑自動化構建任務(非必要)

入門例子:webapp

首先安裝yo、bower、grunt-cli工具

npm install -g yo bower grunt-cli

然后,現在yeoman模板,比如generator-webapp(yeoman的模板前端都是generator-

npm install -g generator-webapp

初始化webapp項目,在任意空目錄下運行下面命令,然后回答幾個簡單的問題

yo webapp 

現在,項目骨架已經創建好了,運行下面命令安裝依賴的前端資源

bower install underscore 

最后,安裝grunt依賴的包,運行構建任務,搞定!

npm install
grunt

為什么是yeoman,而不是grunt-init

grunt-init的定位同樣是前端腳手架。那 grunt + grunt-init 已經滿足了我們從 項目創建 到 項目構建的需求,為什么又冒出個yeoman出來? 從yeoman的受歡迎程度來看,可能有以下兩方面原因:

  1. 解決了一些grunt + grunt-init 沒有幫我們解決的問題
  2. 具有一些grunt + grunt-init 所沒有的有用特性

答案是:兩方面都有。

  1. 基於bower的前端資源依賴管理:這個的重要性無需強調,請回憶一下我們滿頭大汗就為了找到某個js文件,或因缺少某個依賴的js文件導致腳本出錯的經歷。具體可參考knight上周及本周分享 :)
  2. 子模板:相當有用的特性。你可以用它完成子項目創建、子模塊創建、資源更新等工作,給項目提供了更多的靈活性。
  3. 基於問題的項目骨架構建:這點其實grunt-init也有,但yeoman明顯做得更好,如二選一、單選列表、多選列表等。grunt-init 的問答流程內部實現則相對費解。。。

yeoman項目下幾個重要的文件

主要就是下面幾個文件,不贅述

  • Gruntfile.js:grunt任務聲明的地方
  • package.json:項目依賴的插件,比如grunt任務依賴的插件等
  • bower.json:前端資源依賴聲明

創建自己的Generator(模板)

什么是generator就略過了,模板。。。直接進入實操步驟

首先安裝generator-generator,名字比較詭異,意思是“模板的模板”

npm install -g yo generator-generator

創建一個叫做generator-blog的目錄,命令行下進入這個目錄,然后運行

yo generator

然后你會看到下面這坨東東

 _-----_
| |
|--(o)--| .--------------------------.
`---------´ | Welcome to Yeoman, |
( _´U`_ ) | ladies and gentlemen! |
/___A___\ '__________________________'
| ~ |
__'.___.'__
´ ` |° ´ Y `

回答下面兩個簡單問題,搞定

[?] Would you mind telling me your username on Github? chyingp@gmail.com
[?] What's the base name of your generator? blog

在目錄下運行如下命令,讓當前創建的模板成為全局的模塊

npm link

在其他任意目錄運行如下命令,創建項目

yo blog

稍微看下generator-blog的細節

進入generator-blog目錄,看看里面都有什么,bower.json、package.json不贅述,我們需要關注的點:app目錄是模板的核心目錄

其中,index.js 是項目骨架創建的主要邏輯,里面包含了問答設置以及處理、各種目錄、文件操作等(從模板目錄到目標目錄)。根目錄下的package.json主要聲明了模板的名字、版本、git地址等。。。

├── app
│ ├── index.js
│ └── templates
│ ├── _bower.json
│ ├── _package.json
│ ├── editorconfig
│ ├── jshintrc
│ └── travis.yml
├── test
│ ├── test-creation.js
│ └── test-load.js
├── .editorconfig
├── .gitattributes
├── .gitignore
├── .jshintrc
├── .travis.yml
├── LICENSE
├── package.json
└── README.md

generator細節深入

@todo

generator子模板創建

@todo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM