【问题标题】:RequireJS and legacy applicationRequireJS 和遗留应用程序
【发布时间】:2012-07-24 14:05:29
【问题描述】:

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

大部分文件都被压缩并合并在一起。

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

【问题讨论】:

  • 是的,您可以使用 shim 配置选项将非 amd 文件加载为启用 amd

标签: javascript backbone.js requirejs amd


【解决方案1】:

作为一个刚刚开始在使用 Backbone 的遗留代码库上使用 Require.js 的人,我感受到了你的痛苦 :-) 我使用了多种方法,我将在此处列出。

假设您有 fileA.js 和 fileB.js,并且您想将 fileB.js 转换为使用 Require,而不更改 fileA.js:

  • 滥用全局空间

    Require 不会强制您通过它导入每个变量;即使在 Require-ified 文件中,您仍然可以像使用非 Require-ified 代码一样访问全局变量。这意味着如果 fileA 在 global/window 命名空间中创建其所有变量(如果您之前没有使用过 Require,这很有可能),无论 fileA 是否使用 Require,fileB 都可以访问它们。

    这最终成为我大部分遗留文件的解决方案;我只是让它们保持原样,并将所有新的 Require-ified 东西放在它们下面。这样,他们创建的每个全局都准备就绪,并在 Require-ified 文件需要它们时等待。

    现在,如果 fileB 依赖于 fileA 这很好,但如果反过来呢?好吧,Require 也不会阻止你创建新的全局变量,这意味着 fileB 可以与 fileA 共享它想要的任何东西,只要它愿意将它放在全局空间中。

  • 重复代码

    不要生气;我知道“DRY”编码实践的重要性。然而,对于几个文件,我最终做的是制作 Require-ified 副本。这最终是必要的,因为我使用 Handlebars 插件进行 Require 进行模板编译,所以如果我想要任何文件使用 Handlebars,我需要将其 Require-ified。

    为了解决正常的 un-DRY 问题,我在旧文件中添加了 cmets,有效地表示“不要在此文件中添加任何内容,Require-ified 版本是‘真实’版本”。我的计划是随着时间的推移慢慢将更多的站点转换为 Require,直到我最终可以消除原始的、过时的文件。我们有一家小商店,所以它适合我们,但在一家大公司,这可能不可行。

  • 重构

    我知道,您曾说过您想避免这种情况,但有时进行一点重构可以为您带来很多收益。我个人几乎没有重构任何东西,但只有几个地方是一个小的调整大大简化了问题。

    总体而言,我认为重构是您在切换到 Require 后所做的事情(随着时间的推移慢慢将您的非 Require-ified 代码“折叠”)。

  • 垫片

    Chchrist 说 shims 是解决“要求中途”问题的好方法是正确的。但是,我个人根本没有使用它们,所以除了“看对他们来说,他们可能会有所帮助”。

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 2011-08-02
    • 2012-01-26
    • 2013-01-13
    • 2014-12-09
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多