我有一个遗留应用程序,我已将部分应用程序重构为单独的backbone.marionette应用程序。我没有时间或预算来重构整个事情,我希望我的代码更容易管理,这让我想起了requirejs。
大多数文件都是缩小的并且在一起。
我可以将requirejs用于这种类型的混合解决方案,我可以在单独的主干模块上工作并仍然可以访问现有的javascript吗?
答案 0 :(得分:8)
作为刚刚开始在遗留的Backbone使用代码库上使用Require.js的人,我感到很痛苦:-)我使用了一些方法,我将在这里列出。
假设您有fileA.js和fileB.js,并且您希望将fileB.js转换为使用Require,而不更改fileA.js:
滥用全球空间
要求不强制您通过它导入每个变量;即使在Require-ified文件中,您仍然可以像使用非需求代码一样访问全局变量。这意味着如果fileA在全局/窗口命名空间中创建其所有变量(如果您之前没有使用Require,则非常可能),无论fileA是否使用Require,fileB都可以访问它们。
这是我的大多数遗留文件的解决方案;我只是将它们保留原样,然后把所有新的需求物品放在它们下面。这样,当需求文件需要它们时,它们创建的每个全局都已准备就绪并等待。
现在,如果fileB依赖于fileA,这很好,但如果反过来会怎么样?好吧,要求也不会阻止你创建新的全局变量,这意味着fileB可以与fileA共享它想要的任何内容,只要它愿意将它放在全局空间中。
重复代码
不要生气;我知道“干”编码实践有多重要。但是,对于一些文件,我最后做的就是制作Require-ified duplicates。这是必要的,因为我正在使用Handlebars插件来进行我的模板编译,所以如果我想要任何文件使用Handlebars,我需要它是必需的。
为了解决正常的非DRY问题,我在旧文件中添加了评论,有效地说“不要向此文件添加任何内容,要求版本是'真实'版本”。我的计划是随着时间的推移慢慢地将更多的站点转换为Require,直到我最终可以消除原始的,过时的文件。我们有一个小商店,所以它适用于我们,但在一个大公司,这可能不会飞。
重构
我知道,你说你想要避免这种情况,但有时候一点点的重构可以给你带来很多好处。我个人根本没有重构任何东西,但只有几个地方是一个小调整大大简化的事情。
总的来说,在你切换到Require(慢慢地将你的非需求代码加入到折叠中)之后,我看到重构是你做的事情。
垫片