javascript - 将 RequireJS 与非 AMD JavaScript 文件一起使用

标签 javascript requirejs typescript amd

我正在尝试将大量使用 JavaScript 的页面转换为使用 TypeScript,并使用 RequireJS 来管理模块依赖项。

我遇到的问题是,除了 TypeScript 文件之间的相互依赖性之外,该页面还依赖于一些与系统其他部分共享但尚未转换为 AMD 的常见 JavaScript 文件。

把非AMD的脚本放在普通的里面是不是很危险<SCRIPT> Require 标签上方的标签,并假设它们已加载?

如果这是个坏主意,那么处理这个问题的更好方法是什么?我需要每个脚本的 AMD 和非 AMD 版本吗?或者我是否需要转换所有脚本以便它们可以选择调用 define()

最佳答案

RequireJS 的最新版本允许您假装普通 JS 文件实际上是 AMD 模块,不返回任何内容。

我试过的最新版本 - 2.1.4 - 实际上允许您像对待模块一样对待纯 JS 文件。示例:

require(
    [
        'path/to/module' // <- AMD module
        ,'path/to/plainjs' // <- actually a plain JS file
    ]
    , function(module, plain){
        // module will be per define in that file.
        // plain will be 'undefined' type
    }
)

您可以自由地将类似模块的引用混合到纯 JS 文件中。只要它们以正确的顺序加载,它们就会更新它们更新的任何全局变量,你会得到你想要的。示例:

require(['js/underscore'], function(){

    // nesting to insure Underscore, a prereq to BackBone
    // completes loading before backbone starts
    require(
        [
            'path/to/module' // <- AMD module
            ,'js/backbone' // <- actually a plain JS file
        ]
        , function(module){
            // module will be per define in that file.

            window.BackBone // is available for you

        }
    )

})

请注意,虽然 RequireJS 过去要求您将“.js”添加到普通 JS 文件的末尾以表明它们是普通 JS,但在上面的示例中您不使用“.js”这个,无扩展名模块引用允许模块 ID 遵循 pathsmaps 别名,而带有 .js 的 ID 被视为文字并且永远不会被翻译。

关于javascript - 将 RequireJS 与非 AMD JavaScript 文件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587720/

相关文章:

javascript - 不断出现错误 : "Failed with: Uncaught SyntaxError: Unexpected token T in <unknown file>:1" (PARSE CLOUD CODE)

javascript - Web 应用程序 list 是否包含顺序问题?

javascript - Bootstrap模态ajax表单提交多次

javascript - 我可以根据是否选中多个复选框来设置启用或禁用复选框吗?

javascript - RequireJS shim 在简单示例中被忽略

node.js - .then() 不是 Node.js 中的函数

angularjs - AngularJS 中的定义函数有什么作用?

backbone.js - 您如何构建您的 Backbone + RequireJS 应用程序?

javascript - 如何使用 TypeScript 静态注入(inject)器模式注入(inject) `$rootScope`?

javascript - 对象可能是字符串值 'undefined' 上的 Typescript 中的 ''