详解如何使用 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 相关文章推荐
表单(FORM)的一些实用效果代码
Mar 25 Javascript
让任务管理器中的CPU跳舞的js代码
Nov 01 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
jQuery操作属性和样式详解
Apr 13 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
解析Vue 2.5的Diff算法
Nov 28 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
json数据格式常见操作示例
Jun 13 Javascript
js实现踩五彩块游戏
Feb 08 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 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
如何给phpadmin一个保护
2006/10/09 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
php显示时间常用方法小结
2015/06/05 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python super()方法原理详解
2020/03/31 Python
详解python对象之间的交互
2020/09/29 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
怎样让char类型的东西转换成int类型
2013/12/09 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
医学专业应届生的自我评价
2014/02/28 职场文书
暑期社会实践证明书
2014/11/17 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL