前段时间项目组计划快速开发一个新的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