详解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 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
javascript引用对象的方法代码
Aug 13 Javascript
js 取时间差去掉周六周日实现代码
Dec 25 Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
plupload+artdialog实现多平台上传文件
Jul 19 Javascript
javascript 数组去重复(在线去重工具)
Dec 17 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
Mar 30 Javascript
AngularJS自定义过滤器用法经典实例总结
May 17 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 Javascript
Vue.set 全局操作简单示例
Sep 19 Javascript
微信小程序全局变量的设置、使用、修改过程解析
Sep 24 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
JavaScript类库D
2010/10/24 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
python多线程扫描端口示例
2014/01/16 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
Python2包含中文报错的解决方法
2018/07/09 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
中专自荐信
2013/10/13 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
语文教师求职信范文
2015/03/20 职场文书
煤矿隐患排查制度
2015/08/05 职场文书