【问题标题】:how do I determine if a JS file is AMD-compatible?如何确定 JS 文件是否与 AMD 兼容?
【发布时间】:2013-01-25 17:15:24
【问题描述】:

我正在使用curlrequire(同时评估两者)来异步加载js 文件。我在原型应用程序中使用了 5 个 js 文件:

jquery.min.js // off of CDN
Bacon.js // reactive programming tool
curl.js  // js loader
index.coffee // page specific
foo.coffee // app specific

好的,所以我构建了 index.coffeefoo.coffee,所以我很确定它们不兼容 AMD。不过可能是错的,因为foo.coffee

if module? && module.exports?
  module.exports = Foo

最后。

如何查看 js 文件并说“是的,AMD”或“不,不是 AMD”?

【问题讨论】:

  • 您所说的 AMD 是指 Advanced Micro Devices 吗? CPU制造商?
  • @SteveWellens 异步模块定义
  • @SteveWellens 标签 wiki 在这种情况下会有所帮助。
  • +1 用于尝试 CurlJS。不知何故,在过去 2 年使用 AMD 模式的过程中,我完全迁移到了 CurlJS。 RequireJS 是 1.x 倍的(加载时间)混乱。
  • 嘿 jcollum,试试 AMDjs 标签而不是 AMD。 :)

标签: javascript jquery asynchronous amd curl.js


【解决方案1】:

查找 AMD 的 define( 签名。这是一个相当肯定的赌注。不幸的是,它几乎可以在文件中的任何位置。它通常位于顶部或底部。 AMD 模块有很多变体和几种 UMD 模块格式:https://github.com/umdjs/umdhttps://gist.github.com/unscriptable/4118495

Fwiw,您也可以将原始 CommonJS 模块与 curl.js 一起使用。您必须将 CJS 模块放入一个文件夹并告诉 curl 它是一个使用 CJS 模块的包:

curl.config({
    packages: [
        { name: 'foo', location: 'path/to/foo-folder', main: 'foo',
            config: { moduleLoader: 'curl/loader/cjsm11' }
        },
        { name: 'curl', location: 'path/to/curl/src/curl', main: 'curl' }
    ]
});

您需要 curl 包(或路径)来告诉 curl 在哪里可以找到 curl/loader/cjsm11。

【讨论】:

    【解决方案2】:

    AMD 的意思是,您可以根据需要评估代码,而不是在加载时。因此,如果您的代码在下载后立即执行 - 它不是 AMD。如果它有一个包装器,允许按需执行代码 - 它可以像 AMD 模块一样工作。

    如果您要查找exact AMD API,则应在文件开头搜索define

    【讨论】:

    • 如果最后有}).call(this);,那不是AMD?
    • 不,如果该括号内的内容立即执行。所有编译的咖啡脚本最后都用call(this)包裹在这样的大括号中,问题是它们里面是什么。
    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多