详解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重写Cognos右键菜单的实现代码
Apr 11 Javascript
Grid得到选择行数据的方法总结
Jan 17 Javascript
JS自动适应的图片弹窗实例
Jun 29 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
基于Jquery实现万圣节快乐特效
Nov 01 Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
vue2.0 循环遍历加载不同图片的方法
Mar 06 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
Sep 18 Javascript
layui 解决form表单点击无反应的问题
Oct 25 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
Dec 17 Javascript
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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
基于PHP常用函数的用法详解
2013/05/10 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JS的千分位算法实现思路
2013/07/31 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
Overload和Override的区别
2012/09/02 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
学生党员思想汇报
2013/12/28 职场文书
大四本科生的自我评价
2013/12/30 职场文书
六一节目主持词
2014/04/01 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
医学检验专业自荐信
2014/09/18 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
给下属加薪申请报告
2015/05/15 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript