我正在尝试将大量使用 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 遵循 paths
和 maps
别名,而带有 .js
的 ID 被视为文字并且永远不会被翻译。
关于javascript - 将 RequireJS 与非 AMD JavaScript 文件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587720/