CommonJS规范中概述的define()协议给我带来了什么?

时间:2011-05-19 18:34:02

标签: javascript curl requirejs

我了解 proper name-spacing Module Pattern 之类的问题如何解决与 leaking into the global-scope 相关的问题。

我还完全看到 CommonJS Specification 中列出的require()协议中提供的资源依赖关系管理的价值。

然而,我对AMD define()函数的用途和目的的好处感到困惑。

定义的CommonJS签名是:

define(id?, dependencies?, factory);

另外...

起初,它“看起来”像是另一个插件包装......直到我开始看到人们将它与模块模式一起使用。

所以我的问题是:

  • define()协议是什么? 在CommonJS规范中概述 买我?
  • 这是不是更有说服力?
  • 是否意味着要更换模块化模式?
  • 它有点快吗?
  • 如果是,为什么?

1 个答案:

答案 0 :(得分:2)

// main.js
require("foo.js", function(foo) {
    console.log(foo === 42); // true
});

//foo.js

/*
define(42);

define({
   "foo": "bar"
});

define(["bar.js"], function(bar) {
    return bar.foo;
});
*/

define(function() {
     return 42;
});

定义是一种很好的方法,可以在不依赖全局范围的情况下传回模块化对象。

定义的特定API虽然因库而异。

这里的基本思想是在文件中调用define来定义该模块是什么。然后,当您需要该文件时,您将获得该模块。这削弱了全球范围内的中间人。

虽然它并不快(它比注入全球范围要慢)。

使用requiredefine,您只有两个全局值。

上面的特定define示例与requireJS API

相匹配