详解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 相关文章推荐
JQuery 学习笔记 选择器之三
Jul 23 Javascript
js css样式操作代码(批量操作)
Oct 09 Javascript
JavaScript 验证码的实例代码(附效果图)
Mar 22 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
IE下JS读取xml文件示例代码
Aug 05 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
详解JS面向对象编程
Jan 24 Javascript
Bootstrap树形控件使用方法详解
Jan 27 Javascript
JS修改地址栏参数实例代码
Jun 14 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
Jul 03 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 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
php中常用编辑器推荐
2007/01/02 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
Python中的pprint折腾记
2015/01/21 Python
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
python 数据的清理行为实例详解
2017/07/12 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Python Json数据文件操作原理解析
2020/05/09 Python
python代码实现图书管理系统
2020/11/30 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
《小石潭记》教学反思
2014/02/13 职场文书
介绍信如何写
2015/01/31 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js