我正在尝试将JavaScript密集的页面转换为使用TypeScript,并使用RequireJS来管理模块依赖项。
我遇到的问题是,除了TypeScript文件之间的相互依赖关系外,该页面还依赖于与系统其他部分共享的一些常见JavaScript文件,尚未转换为AMD。 / p>
将非AMD脚本放在标记上方的普通<SCRIPT>
标记中是否非常危险,只是假设它们已被加载?
如果这是一个坏主意,有什么更好的方法来解决这个问题?我是否需要拥有每个脚本的AMD和非AMD版本?或者我是否需要转换所有脚本以便他们可以选择调用define()
?
答案 0 :(得分:16)
最新版本的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被视为文字并且永远不会被翻译。
答案 1 :(得分:1)
您可以在脚本标记中手动包含其他脚本,但这可能会成为您的团队总是中断的原因(有人忘记添加特定脚本)。
您可以reference the require.d.ts definition from Definitely Typed and make direct calls使用require
函数而不是import
语句,这可能会使您的内容更加一致。