详解webpack 多入口配置


Posted in Javascript onJune 16, 2017

同事套搭建vue项目,个人推荐了VUE官网的vue-cil的方式,http://cn.vuejs.org/guide/application.html

顺着官网的操作,我们可以本地测试起我们的项目 npm run dev,首先我们要理解webpack打包主要是针对js,查看下面生成的配置,首页是index.html,模版用的index.html,入口文件用的mian.js

详解webpack 多入口配置

//file build/webpack.base.conf.js
//entry 配置

module.exports = {
 entry: {
  app: './src/main.js'
 },
 //....

//file build/webpack.dev.conf.js
//html配置
  new HtmlWebpackPlugin({
   filename: 'index.html',
   template: 'index.html',
   inject: true
  })

1.上面的目录没办法满足我们多入口的要求,我们希望的是html放在一个views文件夹下面,相关业务应用的vue放在一起,对就是这个样子的

详解webpack 多入口配置

我们先简单的改动下我们的配置,来适应这个项目结构,再寻找其中的规律,来完成自动配置(index.html)

//file build/webpack.base.conf.js
//entry 配置

module.exports = {
 entry: {
  'index': './src/view/index/index.js',
  'login': './src/view/login/login.js',
 },
 //....

//file build/webpack.dev.conf.js
//html配置,index我们保留了根目录访问路径
  new HtmlWebpackPlugin({
   filename: 'index.html',
   template: './src/view/index/index.html',
   inject: true,
   chunks: ['index']
  }),
  new HtmlWebpackPlugin({
   filename: 'login/login.html', //http访问路径
   template: './src/view/login/login.html', //实际文件路径
   inject: true,
   chunks: ['login']
  })

2.规律出来了,我们只要按照这样的js和html的对应关系,就可以通过查找文件,来进行同一配置

var glob = require('glob')
function getEntry(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(pathDir, '') : pathname;
    console.log(2, pathname, entry);
    entries[pathname] = './' + entry;
  }
  return entries;
}
//我们的key不是简单用的上一个代码的index,login而是用的index/index,login/login因为考虑在login目录下面还有register
//文件路径的\\和/跟操作系统也有关系,需要注意
var htmls = getEntry('./src/view/**/*.html', 'src\\view\\');
var entries = {};
var HtmlPlugin = [];
for (var key in htmls) {
  entries[key] = htmls[key].replace('.html', '.js')
  HtmlPlugin.push(new HtmlWebpackPlugin({
   filename: (key == 'index\\index' ? 'index.html' : key + '.html'), 
   template: htmls[key],
   inject: true,
    chunks: [key]
  }))
}

3.多入口配置就完成了,当然下面其实还有公共js提取的相关配置,如果项目里面用到了异步加载,即require.ensure,放在单独目录,进行匹配,按照上面的逻辑进行推理吧

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

Javascript 相关文章推荐
js控制的回到页面顶端goTop的代码实现
Mar 20 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
JavaScript构造函数详解
Dec 27 Javascript
javascript实现不同颜色Tab标签切换效果
Apr 27 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
javascript中BOM基础知识总结
Feb 14 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
es6新特性之 class 基本用法解析
May 05 Javascript
mpvue项目中使用第三方UI组件库的方法
Sep 30 Javascript
vue input实现点击按钮文字增删功能示例
Jan 29 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
Jul 09 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
requirejs + vue 项目搭建详解
Jun 16 #Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 #jQuery
jQuery序列化后的表单值转换成Json
Jun 16 #jQuery
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 #Javascript
基于AngularJS实现的工资计算器实例
Jun 16 #Javascript
Angular+Node生成随机数的方法
Jun 16 #Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 #Javascript
You might like
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
python查找目录下指定扩展名的文件实例
2015/04/01 Python
在Python中使用列表生成式的教程
2015/04/27 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
捐赠仪式主持词
2014/03/19 职场文书
交通事故调解协议书
2015/05/20 职场文书
goland 设置project gopath的操作
2021/05/06 Golang