2012-07-24 80 views
6

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

大部分文件都被缩小和拼凑在一起。

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

+0

是的,您可以使用shim config选项来加载非amd文件,并启用amd – chchrist 2012-07-24 14:23:46

回答

8

作为刚刚开始在传统的使用骨干的代码库上开始使用Require.js的人,我感到很痛苦:-)我使用了一些方法的组合,我将在这里列出。

比方说,你有fileA.js和fileB.js,你要转换fileB.js使用要求,在不改变fileA.js:

  • 滥用全局空间

    要求不会强制你通过它导入每个变量;即使在需求文件中,您仍然可以像访问非需求代码一样访问全局变量。这意味着如果fileA在全局/窗口命名空间中创建了所有变量(如果以前不使用Require,很可能会发生这种情况),fileB可以访问它们,而不管fileA是否使用Require。

    这是我对大部分遗留文件的解决方案;我只是把它们留在原地,并将所有新的必需品放在它们下面。这样,当需求文件需要它们时,他们创建的每个全局都准备就绪并等待。

    现在,如果fileB依赖于fileA,那么这很好,但是如果它是相反的呢?那么,Require也不会阻止你创建新的全局变量,这意味着fileB可以与fileA共享任何想要的内容,只要它愿意将它放入全局空间即可。

  • 重复的代码

    不要生气;我知道“DRY”编码做法有多重要。但是,对于只有几个文件,我最终做的是制作需求重复。因为我使用Handlebars插件来执行我的模板编译,因此如果我想要使用Handlebars的任何文件,我需要它作为必需的。

    为了解决正常的非DRY问题,我在旧文件中添加了一些评论,有效地说:“不要添加任何东西到这个文件,需求版本是'真正的'版本。我的计划是逐渐将更多网站转换为需求,直到我终于可以消除原始的,过时的文件。我们有一家小商店,所以它对我们很有用,但是在一家大公司这可能不会飞。

  • 重构

    我知道,你说你想避免这种情况,但有时有点重构可以给你很多爆炸为您的降压。我本人几乎没有重构任何东西,但只有一些地方是一个小调整大大简化了事情。

    总的来说,我看到重构是你在切换到Require之后所做的一些事情(随着时间的推移慢慢地将你的非需求代码带入折叠中)。

  • 垫片

    Chchrist是正确地说,垫片解决“中途要求”的问题。然而,我个人没有使用他们在所有的好办法,所以我真的不能对他们说得很多,除了“看着他们,他们可能会有所帮助”。

相关问题