详解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类 from qq
Nov 13 Javascript
Flash对联广告的关闭按钮讨论
Jan 30 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
Sep 13 Javascript
javascript使用isNaN()函数判断变量是否为数字
Sep 21 Javascript
制作jquery遮罩层效果导航菜单代码分享
Dec 25 Javascript
单击某一段文字改写文本颜色
Jun 06 Javascript
火狐下input焦点无法重复获取问题的解决方法
Jun 16 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
D3.js中强制异步文件读取同步的几种方法
Feb 06 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
Aug 28 Javascript
基于Three.js实现360度全景图片
Dec 30 Javascript
如何在Vue.js中实现标签页组件详解
Jan 02 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
oracle资料库函式库
2006/10/09 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
js自定义回调函数
2015/12/13 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
初步认识Python中的列表与位运算符
2015/10/12 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
python 实现性别识别
2020/11/21 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
动态密码技术
2012/10/18 面试题
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
计算机学生求职信范文
2014/01/30 职场文书
运动员获奖感言
2014/08/15 职场文书
一个都不能少观后感
2015/06/04 职场文书
八年级数学教学反思
2016/02/17 职场文书
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server
使用Python获取字典键对应值的方法
2022/04/26 Python