我正在使用一个非常大的项目:
我们现在想开始将RequireJS与jQuery,BackboneJS和UnderscoreJS一起用于我们从现在开发的所有内容,但是我们没有资源来重写所有遗留的JSP页面。我们可能有时间重写我们已经开发的Backbone模型和视图。
问题在于,对于我们的遗留代码(上面的1和2),我们将所有javascript文件包含在一个巨大的文件中并发送到浏览器。这个庞大的文件必须能够与我们新的RequireJS模板共存,但我怎样才能将巨大文件的某些部分分开,以便我可以使用RequireJS将它们与模板一起使用?无需重写使用该部分文件或具有重复代码的所有页面。
谢谢!
答案 0 :(得分:4)
我不知道我是否完全掌握了手头的问题,但我认为RequireJS的shim
或map
功能会帮助你。
从巨大的javascript文件中提取新模块中所需的部分。然后告诉RequireJS你的巨大的javascript文件是使用shim这个新模块的依赖。类似的东西:
requirejs.config({
shim: {
'new-module': {
deps: ['huge-javascript-file'],
exports: 'NewModule'
}
});
Shim文档:http://requirejs.org/docs/api.html#config-shim
当只有部分新代码必须使用旧的大文件时,map函数可能会很有用。查看此文档:http://requirejs.org/docs/api.html#config-map
答案 1 :(得分:1)
我认为没有一种真正的方法可以实现这一目标,但我通过在全局范围的代码周围定义模块“外观”来解决类似的问题。假设您的遗留脚本定义了一个名为foo
的全局变量。您可以定义AMD模块并从中导出该变量:
//foo.js
define(function() {
return window.foo;
});
//bar.js
define(['foo'], function(foo) {
//do something with foo
});
这样,每次需要使用现有的全局定义代码时,您只需要编写单行外观,而不会破坏需要全局定义相同代码的现有代码。随着时间的推移,您可以将实际实现移动并重构到模块中,而不会破坏消费者代码。