详解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 相关文章推荐
不一样的文字闪烁 轮番闪烁
Nov 11 Javascript
javascript实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
jquery预加载图片的方法
May 27 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
Oct 23 Javascript
js实现加载更多功能实例
Oct 27 Javascript
Angular4学习笔记之新建项目的方法
Jul 18 Javascript
React Native时间转换格式工具类分享
Oct 24 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
Oct 10 Javascript
js实现下拉框二级联动
Dec 04 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
Jul 28 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
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
python实现ftp客户端示例分享
2014/02/17 Python
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
python语音识别实践之百度语音API
2018/08/30 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
Python基于内置函数type创建新类型
2020/10/22 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
家长对孩子评语
2014/01/30 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
村党建工作汇报材料
2014/11/02 职场文书
超强台风观后感
2015/06/09 职场文书
赤壁观后感(2)
2015/06/15 职场文书
2015年征兵工作总结
2015/07/23 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
实例详解Python的进程,线程和协程
2022/03/13 Python