自從前后端開始分離之后,前端項目工程化也顯得越來越重要了,之前寫過一篇搭建基於Angular+Requirejs+Grunt
的前端項目教程,有興趣的可以點這里去看
但是有些項目可以使用這種方式,但有些卻不太適合,或者我們就是想要去嘗試新的框架。比如最近我就嘗試着使用了webpack+react+es6
的方式開發項目,感覺很不錯,然后很多項目都用了這種方式。所以為了不需要每次開發的時候都從頭開始新建文件,就想着能不能弄個工具,使用命令能夠快速的生成這樣一套跑的通的項目模版,正好,有個工具叫yeoman
。
本篇文章看點:
-
教你使用
yeoman
快速開發自己的腳手架。 -
介紹作者編寫的
generator-reactpackage
腳手架模版,此項目的開發基於webpack+react+es6
,項目功能包含:-
啟動本地服務,默認監聽端口8888
-
css文件能自動補全css3屬性的前綴
-
包含路由功能(react-router)
-
使用命令
npm run dev
啟動服務,修改保存文件的時候瀏覽器會自動刷新(如果不想要實時刷新的功能,將webpack.config.js文件的devServer配置改為inline: false
) -
使用
npm run build
打包文件,js和css分開打包,並且默認會壓縮文件
-
開發腳手架
環境准備
安裝或者更新一下你的node和npm
npm install -g n //首先安裝n模塊
n stable //升級node.js到最新穩定版
n 5.0.0 //或者指定版本升級
node -v //檢查更新是否成功
然后安裝yeoman
npm install -g yo
創建目錄
新建一個名為generator-xxx
(yeoman腳手架命名規范)的文件夾,我這里叫generator-reactpackage
。然后在目錄下執行npm init
創建package.json文件。修改為:
{
"name": "generator-reactpackage",
"version": "0.0.4",
"description": "基於ract+webpack的項目目錄快速生成器",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/luckykun/generator-reactpackage.git"
},
"keywords": [
"yeoman-generator"
],
"author": "luckykun",
"license": "MIT",
"bugs": {
"url": "https://github.com/luckykun/generator-reactpackage/issues"
},
"homepage": "https://github.com/luckykun/generator-reactpackage",
"dependencies": {
"chai": "^3.3.0",
"chalk": "^1.1.1",
"fs-extra": "^0.24.0",
"mocha": "^2.3.3",
"yeoman-generator": "^0.24.1",
"yosay": "^1.0.5"
}
}
注意:package.json的信息一定要盡可能完整,不然可能上傳不到generator-lists
然后在此目錄下新建generators->app->index.js
,generators-app-templates
,如下圖所示:
-
generator-reactpackage
是整個npm包的項目文件夾。 -
templates目錄
里面就是我們最后要用到的項目模版文件,里面的內容是一個完整的前端項目,可以自定義。 -
index.js
是開發腳手架的主要邏輯文件。
開始開發
然后編輯index.js文件:
var path = require('path');
var chalk = require('chalk'); //不同顏色的info
var util = require('util');
var yeoman = require('yeoman-generator');
var yosay = require('yosay'); //yeoman彈出框
var path = require('path');
var Reactpackage = yeoman.Base.extend({
info: function() {
this.log(chalk.green(
'I am going to build your app!'
));
},
generateBasic: function() { //按照自己的templates目錄自定義
this.directory('src', 'src'); //拷貝目錄
this.directory('data', 'data');
this.copy('package.json', 'package.json'); //拷貝文件
this.copy('index.html', 'index.html');
this.copy('README.md', 'README.md');
this.copy('webpack.config.js', 'webpack.config.js');
},
generateClient: function() {
this.sourceRoot(path.join(__dirname, 'templates'));
this.destinationPath('./');
},
install: function() { //安裝依賴
this.installDependencies({
skipInstall: this.options['skip-install']
});
},
end: function() {
this.log(yosay(
'Your app has been created successfully!'
));
}
});
module.exports = Reactpackage;
上面這個文件就是主要邏輯部分了。至於具體的語法,可以參考這篇文章。快速搭建基於yeoman快速編寫腳手架工具
上傳
開發完成之后,我們就可以將generator-reactpackage
這個項目上傳到npm官網。步驟如下:
npm adduser //如果沒有賬號,用此命令注冊
npm login //如果有賬號,用此命令登陸
npm publish --access=public //上傳到npm官網
上傳成功后會提示:
+ generator-reactpackage@0.0.4
然后你可以訪問http://yeoman.io/generators/這里去搜索一下自己的包,有沒有上傳成功,比如搜索reactpackage
就會出現我上傳的腳手架。如下圖:
注意:
-
上傳到npm官網之前需要先將腳手架項目上傳到github
-
腳手架項目的package.json文件一定要盡可能詳細,比如git主頁,readme文件鏈接等等
如果你能搜到自己上傳的腳手架了,OK,開發基於yeoman的腳手架工具就到這里結束了。有興趣的同學可以去看看我編寫的generator-reactpackage源碼,喜歡的同學順便來個star~~哈哈,感謝~
使用腳手架(generator-reactpackage)
首先確保自己安裝了nodejs,然后全局安裝yeoman
npm install -g yo
然后直接安裝腳手架
npm install -g generator-reactpackage
在合適的地方新建一個文件夾,在文件夾下運行:
yo reactpackage
然后就會在此目錄下生成以下目錄結構:
├── data
│ └── test.json
├── src
│ ├── components
│ │ └── App.js
│ ├── images
│ │ └── yeoman.png
│ ├── styles
│ │ └── app.scss
│ ├── vendor
│ │ └── jquery.js
│ ├── views
│ │ └── home.html
├── node_modules
├── index.html
├── package.json
└── webpack.config.js
細心的同學可能已經發現,其實這里生成的內容就是我們腳手架中定義的templates目錄
下的內容。
然后使用以下命令:
npm run dev //項目開發過程使用,啟動服務,實時刷新
npm run build //開發完成之后打包文件(js、css分開打包)
注意:
-
本項目默認監聽端口是8888,所以在瀏覽器輸入 http://localhost:8888 就能看到效果了
-
如果執行上述命令提示錯誤:
Error: getaddrinfo ENOTFOUND localhost
,在host文件里面添加127.0.0.1 localhost
即可 -
監聽端口和實時刷新的功能都能在
webpack.config.js
文件中修改配置 -
如果項目運行正常,會看到如下效果:
結語
可以看到,定義一個自己常用的腳手架騎士挺簡單的,還有更多的功能有待探索。generator-reactpackage
是一個基於webpack+react+es6開發的項目模版,有需要用到這個模版的同學就趕快安裝用起來吧。
另外,它的源碼已經上傳到github上,喜歡generator-reactpackage的同學順便給個star,多謝~~~