前段時間項目組計劃快速開發一個新的App項目,App開發那邊提供殼子和部分系統級功能,全部的頁面由h5完成,考慮兼容性安卓4.1及ios7.1。全新的項目,沒有歷史包袱,就嘗試了新的開發模式,採用了webpack + vue-cli + vue-router + es6 + axios
這一套,從webpack
配置到文件目錄,從開發流程到上線部署,摸索嘗試,到目前初版已經上線。後面會繼續優化,先把目前的基本部署方式記錄下來。javascript
webpack -- ^3.6.0 | vue -- ^2.5.2 | vue-router -- ^3.0.1 | axios -- ^0.17.1
複製代碼
.html
及對應的.js/.css
文件npm run build
以後生成的dist目錄,能夠經過http://m.example.com/index.html
直接訪問到index.html
最終生成的dist目錄相似於:css
例:http://m.example.com/index.html
能夠訪問到首頁,http://m.example.com/center/regist.html
則訪問到註冊頁,而http://m.example.com/center/regist.html#agreement
訪問到用戶協議頁html
webpack.dev.conf.js
和webpack.dev.prod.js
進行merge覆蓋base.js/base.css/plugins/images
HtmlWebpackPlugin
的實例,每一個實例都對應一個入口,每一個入口打包出一個頁面vue-router
實現前端路由,統一在此文件夾下定義,會被entry中的入口js引入使用HtmlWebpackPlugin
打包基於的模板頁,多個入口能夠共用一個模板頁。但實際開發中可能某些入口有私有的邏輯,需單首創建模板例:若是咱們想最終生成http://m.example.com/center/regist.html
且含有前端路由的話,須要涉及到的文件有:前端
1. src/entry/regist.js,以建立入口文件,供`HtmlWebpackPlugin`使用
2. config/webpack.user.conf.js,新建入口,指定入口文件爲`src/entry/regist.js`;新建`HtmlWebpackPlugin`實例,指定打包後生成的文件路徑、文件名及js
3. src/router/regist.js,由於涉及到前端路由,須要配置路由信息
4. page/center/regist.vue、page/center/agreement.vue,進行頁面自身邏輯樣式的開發
複製代碼
默認的webpack配置大致是採用build/webpack.base.js + build/webpack.dev.js/build/webpack.prod.js
merge後的結果,爲了方便實現統一配置,在config下新建了webpack.user.conf.js
,再分別和build/webpack.dev.js/build/webpack.prod.js
merge,所以頁面的配置,基本都在webpack.user.conf.js
進行。vue
src/entry/
/src/dist/
,開發環境默認打包後放在內存中,不表明實際物理路徑,output具體配置:output: {
path: path.resolve(__dirname, '../dist'),
filename: 'static/js/[name].[chunkhash:16].js',
chunkFilename: 'static/js/[id].[chunkhash:16].js',
publicPath: '/pailifan/'
}
複製代碼
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor', /*在entry中指定vendor對應的模塊爲[vue.js,vue-router.js]*/
filename: 'static/js/vendor.[chunkhash:16].js',
minChunks: Infinity
})
複製代碼
npm i && npm run dev
src/dist
、src/node_modules
npm i && npm run build
,生產環境不能直接操做dist目錄(npm run build實際會先刪除dist目錄再生成,直接操做會致使發佈時文件404),需先在發佈機生成dist後覆蓋到生產服務器對應的dist目錄npm i && npm run build
,同發佈一致附: vue-cli + es6 + axios項目踩坑java