本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/07/20/%E5%A6%82%E4%BD%95%E5%9C%A8RequireJS%E4%B8%AD%E5%AE%9A%E4%B9%89%E6%A8%A1%E5%9D%97/
摘要
本文主要讲述了:
- 对象
- 回调函数
- 具有依赖关系的对象
- 具有依赖关系的函数
- CommonJS 包装函数
- 带有名称的模块
正文
模块不同于传统脚本文件之处就在于:模块可以避免污染全局作用域。
RequireJS 通过define()
来定义模块。
对象
假如模块本身没有依赖项,且模块只是简单的对象。那么可以把对象作为参数直接传递给define()
函数。
示例:
1 | define({ |
回调函数
假如模块本身没有依赖,但是需要在定义模块之前做一些工作。那么可以向define()
传递一个回调函数。
示例:
1 | define(function () { |
具有依赖关系的对象
假如模块需要依赖,那么define()
的第一个参数应该是依赖名数组,第二个参数是回调函数。
在所有依赖项都被加载之后,回调函数才会执行。
示例:
1 | define(['./cart', './inventory'], function (cart, inventory) { |
具有依赖关系的函数
RequireJS 也允许定义函数格式的模块。
示例:回调函数返回了一个函数而非对象。
1 | define(['my/cart', 'my/inventory'], function (cart, inventory) { |
CommonJS 包装函数
如果开发者希望在 ReqiureJS 中复用 CommonJS 模块的代码,可以使用 CommonJS 包装函数。
示例:
1 | define(function (require, exports, module) { |
带有名称的模块
带名称的模块通常由优化工具生成,开发者可以显式设置模块的名称,但这会使得可移植性降低。如果将模块文件移动到另外一个目录就需要重命名。因此不推荐开发者定义带名称的模块,而交给优化工具自动处理。
示例:
1 | define('demo', function () { |