详解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判断浏览器是否是IE的比较好的办法
May 08 Javascript
关于JavaScript中的关联数组分析
Apr 09 Javascript
iframe里的页面禁止右键事件的方法
Jun 10 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 Javascript
JavaScript实现select添加option
Jul 03 Javascript
几种响应式文字详解
May 19 Javascript
JS实现评价的星星功能
Aug 20 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
Feb 08 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 Javascript
如何通过Proxy实现JSBridge模块化封装
Oct 22 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
一个用于网络的工具函数库
2006/10/09 PHP
PHP新手上路(二)
2006/10/09 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
bootstrap table实例详解
2017/01/06 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
Python Grid使用和布局详解
2018/06/30 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
行政专员岗位职责
2014/01/02 职场文书
三查三看党性分析材料
2014/02/18 职场文书
北体毕业生求职信
2014/02/28 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
创业计划书之面包店
2019/09/12 职场文书
python常见的占位符总结及用法
2021/07/02 Python