webpack学习笔记之代码分割和按需加载的实例详解


Posted in Javascript onJuly 20, 2017

本文介绍了webpack学习笔记之代码分割和按需加载的实例详解,分享给大家,也给自己留个笔记

为什么需要代码分割和按需加载

代码分割就是我们根据实际业务需求将代码进行分割,然后在合适的时候在将其加载进入文档中。

举个简单的例子:

1.一个HTML中存在一个按钮

2.点击按钮出现一个包着图片的div

3.点击关闭按钮图片消失

Demo目录:

webpack学习笔记之代码分割和按需加载的实例详解

一.当未点击按钮时浏览器只加载了对入口文件打包后的js

webpack学习笔记之代码分割和按需加载的实例详解

二.点击按钮会对组件进行异步加载

webpack学习笔记之代码分割和按需加载的实例详解

这个clichunk就是我们打包好的click组件,包括相应的JS逻辑html和css

例子源码记录

1.编辑入口文件

window.onload=function(){
     var _cs=require('./index.css');
     var $=require('jquery');

     $('#_click').on('click',function(){
       require.ensure([],function(require){
         var _click=require('./_clickWindow.js');
         if(!_clickEvent){
           console.log(_click);
           var _clickEvent=_click._clicks;
         }
         new _clickEvent();
       },'cli')
     });
};

webpack将一切视为模块,CSS,js,html,JSX等等。

var _cs=require('./index.css');

引入对应的css模块。这就需要我们安装css-loder和style-loader。

webpack学习笔记之代码分割和按需加载的实例详解 

?save -dev的目的是为了在package.json文件的devDependencies写入依赖项。

点击按钮时,加载定义好的组件,当加载完成后执行组件里的方法。

首先要学习require.ensure方法:

在commonjs中有一个Modules/Async/A规范,里面定义了require.ensure语法。webpack实现了它,作用是可以在打包的时候进行代码分片,并异步加载分片后的代码。用法如下:

require.ensure([], function(require){
  var list = require('./list');
  list.show();
});

中括号内写入依赖项

此时list.js会被打包成一个单独的chunk文件,大概长这样:

1.fb874860b35831bc96a8.js。

可读性比较差,此时就需要加入第三个参数

require.ensure([], function(require){
  var list = require('./list');
  list.show();
}, 'list');

此时打包后的js文件名为

list.fb874860b35831bc96a8.js

也可以传入像”question/list”这样带层级的名字,这样webpack会按照层级给你创建文件夹。

require.ensure([], function(require){
  var list = require('./list');
  list.show();
  var edit = require('./edit');
  edit.display();
}, 'list_and_edit');

同时引入两个文件,webpack会将这两个文件和写入的依赖项打包在一起,如果你不希望打包在一起,只能写两require.ensure分别引用这两个文件。

require.ensure([‘./a.js'], function(require){
  var list = require('./list');
  list.show();
});

require.ensure([‘./a.js'], function(require){
  var b = require('./b');
  b.show();
});

如果list和b同时以来a.js那么在打包时a.js会被重复打包两次,如果想解决这样的问题,那么

require.ensure([‘./a.js'], function(require){
  var list = require('./list');
  list.show();
},'list-b');

require.ensure([‘./a.js'], function(require){
  var b = require('./b');
  b.show();
},'list-b');

此时这三个文件就会被打包在一起。

2.组件js

(function(){
  var _html=require('./_clickHtml.html');
  var $=require('jquery');

  function ClickWindow(){
   this.div=$('body').append(_html);
   $('#_tip').append('<img src="./timg.jpg">');
   this.init();
  }
  ClickWindow.prototype.init=function(){
   $('#_tip').append('<button>关闭</button>')
     .on('click',function(){
       $('img').animate({'width':0},300);
     });
  };

  module.exports._clicks=ClickWindow;
})();

引入写好的html同上需要下载html-loader

3.配置文件

var path=require('path');
module.exports={
 entry:__dirname+'/index.js',
 output:{
   path: __dirname,
   filename:'[name]bundle.js',
   chunkFilename:'[name]chunk.js'
 },
  module: {
      loaders: [  //加载器
       {test: /\.css$/, loader: "style!css" },
       {test: /\.html$/, loader: "html" },
       {test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}
      ]
  }
};

filename:'[name]bundle.js',

[name]指向入口文件的name

chunkFilename:'[name]chunk.js'

[name]指向require.ensure定义的第三个参数

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

Javascript 相关文章推荐
js removeChild 障眼法 可能出现的错误
Oct 06 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
Jun 18 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
Nov 30 Javascript
jQuery操作cookie方法实例教程
Nov 25 Javascript
简介JavaScript中setUTCSeconds()方法的使用
Jun 12 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
Jul 27 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
electron-vue开发环境内存泄漏问题汇总
Oct 10 Javascript
详解小程序如何动态绑定点击的执行方法
Nov 26 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 #Javascript
深入探究AngularJs之$scope对象(作用域)
Jul 20 #Javascript
通过命令行创建vue项目的方法
Jul 20 #Javascript
基于BootStrap实现简洁注册界面
Jul 20 #Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
Jul 20 #Javascript
深入探究node之Transform
Jul 20 #Javascript
微信小程序“摇一摇”的实例代码
Jul 20 #Javascript
You might like
《心理测量者3》剧场版动画预告
2020/03/02 日漫
web方式ftp
2006/10/09 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
Django自定义分页效果
2017/06/27 Python
python导入坐标点的具体操作
2019/05/10 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Django 路由层URLconf的实现
2019/12/30 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
汽车促销活动方案
2014/03/31 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
小学教师教学反思
2016/02/24 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js