详解如何使用 vue-cli 开发多页应用


Posted in Javascript onDecember 16, 2017

本文介绍了如何使用 vue-cli 开发多页应用,分享给大家,具体如下:

修改的webpack配置文件

全局配置

修改 webpack.base.conf.js

打开 ~\build\webpack.base.conf.js ,找到entry,添加多入口

entry: {
  app: './src/main.js',
  app2: './src/main2.js',
  app3: './src/main3.js',
},

运行、编译的时候每一个入口都会对应一个Chunk

run dev 开发环境

修改 webpack.dev.conf.js

打开 ~\build\webpack.dev.conf.js ,在plugins下找到new HtmlWebpackPlugin,在其后面添加对应的多页,并为每个页面添加Chunk配置

chunks: ['app']中的app对应的是webpack.base.conf.js中entry设置的入口文件

plugins:[
  // https://github.com/ampedandwired/html-webpack-plugin
  // 多页:index.html → app.js
  new HtmlWebpackPlugin({
   filename: 'index.html',//生成的html
   template: 'index.html',//来源html
   inject: true,//是否开启注入
   chunks: ['app']//需要引入的Chunk,不配置就会引入所有页面的资源
  }),
  // 多页:index2.html → app2.js
  new HtmlWebpackPlugin({
   filename: 'index2.html',//生成的html
   template: 'index2.html',//来源html
   inject: true,//是否开启注入
   chunks: ['app2']//需要引入的Chunk,不配置就会引入所有页面的资源
  }),
  // 多页:index3.html → app3.js
  new HtmlWebpackPlugin({
   filename: 'index3.html',//生成的html
   template: 'index3.html',//来源html
   inject: true,//是否开启注入
   chunks: ['app3']//需要引入的Chunk,不配置就会引入所有页面的资源
  })
]

run build 编译

修改 config/index.js

打开~\config\index.js,找到build下的index: path.resolve(__dirname, '../dist/index.html'),在其后添加多页

build: {
  index: path.resolve(__dirname, '../dist/index.html'),
  index2: path.resolve(__dirname, '../dist/index2.html'),
  index3: path.resolve(__dirname, '../dist/index3.html'),
},

修改 webpack.prod.conf.js

打开~\build\webpack.prod.conf.js,在plugins下找到new HtmlWebpackPlugin,在其后面添加对应的多页,并为每个页面添加Chunk配置

HtmlWebpackPlugin 中的 filename 引用的是 config/index.js 中对应的 build

plugins: [
  // 多页:index.html → app.js
  new HtmlWebpackPlugin({
    filename: config.build.index,
    template: 'index.html',
    inject: true,
    minify: {
      removeComments: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true
      // more options:
      // https://github.com/kangax/html-minifier#options-quick-reference
    },
    // necessary to consistently work with multiple chunks via CommonsChunkPlugin
    chunksSortMode: 'dependency',
    chunks: ['manifest','vendor','app']//需要引入的Chunk,不配置就会引入所有页面的资源
  }),
  // 多页:index2.html → app2.js
  new HtmlWebpackPlugin({
    filename: config.build.index2,
    template: 'index2.html',
    inject: true,
    minify: {
      removeComments: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true
    },
    chunksSortMode: 'dependency',
    chunks: ['manifest','vendor','app2']//需要引入的Chunk,不配置就会引入所有页面的资源
  }),
  // 多页:index3.html → app3.js
  new HtmlWebpackPlugin({
    filename: config.build.index3,
    template: 'index3.html',
    inject: true,
    minify: {
      removeComments: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true
    },
    chunksSortMode: 'dependency',
    chunks: ['manifest','vendor','app3']//需要引入的Chunk,不配置就会引入所有页面的资源
  }),
]

如果页面比较多,可以考虑使用循环将 HtmlWebpackPlugin 添加到 plugins

// utils.js
exports.getEntry = function(globPath, pathDir) {
  var files = glob.sync(globPath);
  var entries = {},
    entry, dirname, basename, pathname, extname;

  for (var i = 0; i < files.length; i++) {
    entry = files[i];
    dirname = path.dirname(entry);
    extname = path.extname(entry);
    basename = path.basename(entry, extname);
    pathname = path.join(dirname, basename);
    pathname = pathDir ? pathname.replace(new RegExp('^' + pathDir), '') : pathname;
    entries[pathname] = ['./' + entry];
  }
  return entries;
}
// webpack.base.conf.js
var pages = Object.keys(utils.getEntry('../src/views/**/*.html', '../src/views/'));
pages.forEach(function (pathname) {
  // https://github.com/ampedandwired/html-webpack-plugin
  var conf = {
    filename: '../views/' + pathname + '.html', //生成的html存放路径,相对于path
    template: '../src/views/' + pathname + '.html', //html模板路径
    inject: false,  //js插入的位置,true/'head'/'body'/false
    /*
     * 压缩这块,调用了html-minify,会导致压缩时候的很多html语法检查问题,
     * 如在html标签属性上使用{{...}}表达式,所以很多情况下并不需要在此配置压缩项,
     * 另外,UglifyJsPlugin会在压缩代码的时候连同html一起压缩。
     * 为避免压缩html,需要在html-loader上配置'html?-minimize',见loaders中html-loader的配置。
     */
    // minify: { //压缩HTML文件
    //   removeComments: true, //移除HTML中的注释
    //   collapseWhitespace: false //删除空白符与换行符
    // }
  };
  if (pathname in config.entry) {
    conf.favicon = 'src/images/favicon.ico';
    conf.inject = 'body';
    conf.chunks = ['vendors', pathname];
    conf.hash = true;
  }
  config.plugins.push(new HtmlWebpackPlugin(conf));
});

同样入口 entry 也可以使用

// webpack.base.conf.js
entry: {
  app: utils.getEntry('../src/scripts/**/*.js', '../src/scripts/')
},

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 目录列举函数
Nov 06 Javascript
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
window.showModalDialog()返回值的学习心得总结
Jan 07 Javascript
js获取Get值的方法
Sep 29 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
vue权限管理系统的实现代码
Jan 17 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 jQuery
解决微信小程序调用moveToLocation失效问题【超简单】
Apr 12 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
Nov 18 jQuery
js实现点击上传图片并设为模糊背景
Aug 02 Javascript
详解VUE 数组更新
Dec 16 #Javascript
详解如何用模块化的方式写vuejs
Dec 16 #Javascript
浅谈 Vue 项目优化的方法
Dec 16 #Javascript
在vue-cli中组件通信的方法
Dec 16 #Javascript
动手写一个angular版本的Message组件的方法
Dec 16 #Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
Dec 16 #Javascript
使用Electron构建React+Webpack桌面应用的方法
Dec 15 #Javascript
You might like
php+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
PHP XML数据解析代码
2010/05/26 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
php.ini中date.timezone设置分析
2011/07/29 PHP
PHP基本语法总结
2014/09/06 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
Three.js基础部分学习
2017/01/08 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python3+Appium安装使用教程
2019/07/05 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python中的面向接口编程示例详解
2021/01/17 Python
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
文秘求职信范文
2014/04/10 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
租房协议书
2014/09/12 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
结婚典礼主持词
2015/06/29 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL