RequireJS和遗留应用程序

时间:2012-07-24 14:05:29

标签: javascript backbone.js requirejs amd

我有一个遗留应用程序,我已将部分应用程序重构为单独的backbone.marionette应用程序。我没有时间或预算来重构整个事情,我希望我的代码更容易管理,这让我想起了requirejs。

大多数文件都是缩小的并且在一起。

我可以将requirejs用于这种类型的混合解决方案,我可以在单独的主干模块上工作并仍然可以访问现有的javascript吗?

1 个答案:

答案 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(慢慢地将你的非需求代码加入到折叠中)之后,我看到重构是你做的事情。

  • 垫片

    Chchrist说垫片是解决“需要中途”问题的好方法但是,我个人根本没有使用它们,所以除了“看”之外我真的不能说太多对他们来说,他们可能会有所帮助“。