代码之家  ›  专栏  ›  技术社区  ›  Eric Palakovich Carr

在项目之间同步内部JavaScript代码的好方法是什么?

  •  3
  • Eric Palakovich Carr  · 技术社区  · 15 年前

    在我的Web项目(django框架)中,我通常有一些内部开发的javascript文件,它们之间共享。这些Web项目存储在单独的mercurial源代码存储库中。以下是相关的目录结构:

    + static
    --+ css
    --+ images
    --+ js
    -----+ thirdparty
    -----+ mycompany
    --------+ shared_lib1.js
    --------+ shared_lib2.js
    --------+ project_only_lib.js
    -----+ tests
    

    链接到HTML中的脚本如下:

    <script src="/static/js/mycompany/shared_lib1.js" type="text/javascript"></script>
    

    当前,当我在一个共享的libs中进行更改(比如修复bug)并签入它时,更新的代码只存在于一个存储库中。因此,现在我手动将更改复制到其他存储库并将其签入。

    这看起来很蠢。

    我还应该做些什么来更改JavaScript,将其提交到源代码管理,并将这些更改反映到其他Web项目中?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Pekka    15 年前

    您可以考虑将共享库存储在中央存储库和中央Web服务器(例如 http://domain.com/shared_libs/ ,为每个版本(或标记,或是发布的版本)都有一个目录,并直接从那里嵌入libs。

    对于第45版,您将:

    http://domain.com/shared_libs/45/lib1.js
    http://domain.com/shared_libs/45/lib2.js
    

    对于名为“0.8-beta3”的标签(或任何Mercurial等价物是…)。

    http://domain.com/shared_libs/0.8-beta3/lib1.js
    http://domain.com/shared_libs/0.8-beta3/lib2.js
    

    等。

    在任何操作系统上,为每个(有意义的)修订版创建一个新目录并导出正确文件的过程都应该相当容易。

    在每个项目中,您只有对中央服务器的引用,如下所示:

    <script src="http://domain.com/shared_libs/45/lib1.js">
    

    这样,每个内部项目都可以选择要使用的共享库的版本-对于不兼容的更改非常好,或者需要立即部署的生产版本,并且使用新的未知版本的共享库不会有风险。

    此外,共享库通过这种方式与项目的修订历史完全分离。

    如果共享库中发生了重要的更新,则必须更改每个项目中的引用(例如从 /45/lib1.js /52/lib2.js -但是,从长远来看,切换到每一个版本都是更安全的方式,以防新版本中包含破坏其他项目的bug。

    另一种选择是为共享的库建立一个中央回购协议,使用Mercurial与Subversion的外部等效物,从每个项目“链接”到库,与外部的频繁更新保持同步。

    (我在这里假设mercurial和subversion一样处理修订号,在每次提交时创建一个新的修订号—我希望这是正确的。)