详解webpack require.ensure与require AMD的区别


Posted in Javascript onDecember 13, 2017

简介

require-ensure和require-amd的区别:

require-amd

说明: 同AMD规范的require函数,使用时传递一个模块数组和回调函数,模块都被下载下来且都被执行后才执行回调函数

语法: require(dependencies: String[], [callback: function(...)])

参数

  1. dependencies: 模块依赖数组
  2. callback: 回调函数

require-ensure

说明: require.ensure在需要的时候才下载依赖的模块,当参数指定的模块都下载下来了(下载下来的模块还没执行),便执行

参数指定的回调函数。require.ensure会创建一个chunk,且可以指定该chunk的名称,如果这个chunk名已经存在了,则将本次依赖的模块合并到已经存在的chunk中,最后这个chunk在webpack构建的时候会单独生成一个文件。

语法: require.ensure(dependencies: String[], callback: function([require]), [chunkName: String])

  1. dependencies: 依赖的模块数组
  2. callback: 回调函数,该函数调用时会传一个require参数
  3. chunkName: 模块名,用于构建时生成文件时命名使用

注意点:requi.ensure的模块只会被下载下来,不会被执行,只有在回调函数使用require(模块名)后,这个模块才会被执行。

示例

require-amd

源代码

webpack.config.amd.js

var path = require("path");
module.exports = {
  entry: "./example.amd.js",
  output: {
    path: path.join(__dirname, "amd"),
    filename: "[name].bundle.js",
    chunkFilename: "[id].chunk.js"
  }
};

example.amd.js

require(["./module1"], function(module1) {
  console.log("aaa");
  var module2 = require("./module2");
  console.log("bbb");
});

module1.js

console.log("module1");
module.exports = 1;

module2.js

console.log("module2");
module.exports = 2;

构建结果

命令行中运行webpack --config webpack.config.amd.js
- main.bundle.js
- example.amd.js
- 1.chunk.js
- module1.js
- module2.js

运行结果

浏览器中运行amd/index.html,控制台输出:

module1
aaa
module2
bbb

require-ensure

源代码

webpack.config.ensure.js

var path = require("path");
module.exports = {
  entry: "./example.ensure.js",
  output: {
    path: path.join(__dirname, "ensure"),
    filename: "[name].bundle.js",
    chunkFilename: "[name].chunk.js"
  }
};

example.ensure.js

require.ensure(["./module1"], function(require) {
  console.log("aaa");
  var module2 = require("./module2");
  console.log("bbb");
  require("./module1");
}, 'test');

module1.js
同上

module2.js
同上

构建结果

命令行中运行webpack --config webpack.config.ensure.js
- main.bundle.js
- example.amd.js
- 1.chunk.js
- module1.js
- module2.js

运行结果

浏览器中运行ensure/index.html,控制台输出:

aaa
module2
bbb
module1

require-ensure-chunk

源代码

webpack.config.ensure.chunk.js

var path = require("path");
module.exports = {
  entry: "./example.ensur.chunk.js",
  output: {
    path: path.join(__dirname, "ensure-chunk"),
    filename: "[name].bundle.js",
    chunkFilename: "[name].chunk.js"
  }
};

example.ensur.chunk.js

require.ensure(["./module1"], function(require) {
  console.log("aaa");
  require("./module1");
  console.log("bbb");
}, 'common');

require.ensure(["./module2"], function(require) {
  console.log("ccc");
  require("./module2");
  console.log("ddd");
}, 'common');

module1.js
同上

module2.js
同上

构建结果

命令行中运行webpack --config webpack.config.ensure.js
- main.bundle.js
- example.amd.js
- 1.chunk.js
- module1.js
- module2.js

运行结果

浏览器中运行ensure/index.html,控制台输出:

aaa
module1
bbb
ccc
1module2
ddd

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

Javascript 相关文章推荐
JS网络游戏-(模拟城市webgame)提供的一些例子下载
Oct 14 Javascript
js 代码集(学习js的朋友可以看下)
Jul 22 Javascript
jquery实现居中弹出层代码
Aug 25 Javascript
判断一个对象是否为jquery对象的方法
Mar 12 Javascript
jquery实现效果比较好的table选中行颜色
Mar 25 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
Jun 24 Javascript
Node.js实现数据推送
Apr 14 Javascript
微信小程序 Flex布局详解
Oct 09 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
Jan 04 Javascript
js合并两个数组生成合并后的key:value数组
May 09 Javascript
jquery.pagination.js分页使用教程
Oct 23 jQuery
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
vue登录路由验证的实现
Dec 13 #Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 #Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 #Javascript
vue组件中使用iframe元素的示例代码
Dec 13 #Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 #Javascript
vue实现nav导航栏的方法
Dec 13 #Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 #Javascript
You might like
实现“上一页”和“下一页按钮
2006/10/09 PHP
php简单静态页生成过程
2008/03/27 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
python实现简单文件读写函数
2021/02/25 Python
三年级数学教学反思
2014/01/31 职场文书
火锅店的活动方案
2014/08/15 职场文书
党员评议个人总结
2014/10/20 职场文书
《1942》观后感
2015/06/08 职场文书