繁体   English   中英

使用RequireJS和非AMD JavaScript文件

[英]Using RequireJS alongside non-AMD JavaScript files

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

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

将非AMD脚本放在标签上方的普通<SCRIPT>标签中是否非常危险,只是假设它们已被加载?

如果这是一个坏主意,那么处理这个问题的更好方法是什么? 我是否需要拥有每个脚本的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被视为文字并且永远不会被翻译。

您可以在脚本标记中手动包含其他脚本,但这可能会成为您的团队总是中断的原因(有人忘记添加特定脚本)。

您可以从Definitely Typed引用require.d.ts定义,并直接调用 require函数而不是import语句,这可能会使事情更加一致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM