【问题标题】:Best way to keep files that are used in multiple projects in sync?使多个项目中使用的文件保持同步的最佳方法?
【发布时间】:2014-11-28 08:36:12
【问题描述】:

我有几个名为"helpers.scss""helpers.js""consolerules.js" 的文件,我在每个项目中都会用到它们。当我在处理一个项目时,我正在修改其中一个文件,例如,我将添加一个用于将字符串中的所有字符串替换为 "helpers.js" 的函数,但是当我打开另一个项目时,我没有该函数.

或者我会在其他项目的helpers.scss 中添加一个辅助css 类,而我在其他项目中没有。

当我在其中一个项目中编辑它们时,让它们始终保持同步的最佳方法是什么?我在考虑 bower、gists、git、dropbox、google drive 或类似的东西......

【问题讨论】:

  • 创建一个名为“Shared”的文件夹并将所有项目引用到该文件夹​​。除了 javascript,您没有提及您使用的是哪种技术。因此,在服务器环境中,您可以在所有根域之外拥有所有这些域都可以访问的目录。然后你只更新那 1 个目录
  • 我想说这取决于您使用的版本控制系统 - 您已经在使用一个,对吧?如果没有,请决定使用哪一个并采用该系统的最佳实践(分支等)。
  • 您必须将这些文件移动到一个单独的项目中,该项目将成为您项目的 CDN
  • 这个问题最好在Software Engineering提出

标签: javascript


【解决方案1】:

我用了两种方法来处理这些:

获取类似 CDN 的服务器

拥有这些文件的单一版本并将它们放在服务器上。例如,您可以有如下 URL:

https://cdn.example.com/css/helpers.css
https://cdn.example.com/js/helpers.js

如果您想支持版本(也许应该?),您可以将其添加到文件名中:

https://cdn.example.com/css/helpers-1.3.css
https://cdn.example.com/js/helpers-1.2.js

如果您将所有文件视为具有一个通用版本,则转到路径:

https://cdn.example.com/1.2/css/helpers.css
https://cdn.example.com/1.2/js/helpers.js

如果您想在实际网站上使用该版本之前使用最新版本测试网站,则版本控制非常有用。

如果您能以这种方式实现,这无疑是最简单的方法。现在您的所有其他网站都将使用这些 URL,而不是文件的本地版本:

<link type="text/stylesheet" href="https://cdn.example.com/1.2/css/helpers.css"/>

在构建时提取这些文件

根据您组织网站的方式(从您的问题中确实不清楚)并假设您的计算机上有包含原始源的文件夹,您可以根据需要使用在上传之前运行的脚本引入这些文件您的网站。

就我而言,我喜欢分三步完成:

  1. 我写文件
  2. 我将文件复制到 .../build/... 文件夹
  3. 我将 .../build/... 文件夹发送到我的测试或生产服务器

这样做的一个原因是生成一个包含您想要的内容的构建文件夹,对其进行验证,然后将其发送到您的服务器。该验证仅在您编写脚本时发生。一旦完成,它应该不需要任何额外的工作。

所以...获得这样一个脚本的一个原因是我可以编译我的文件。例如,如果您编写 PHP 代码,服务器只需要代码的最压缩版本(除非您正在调试并且需要查找行号......)生成构建文件夹的脚本可以这样做:

for p in php/*.php
do
    php -w $p build/$p
done

现在您服务器上的 PHP 代码可能会缩小 20%。

同样,您可以复制 helper.css 文件,如下所示:

cp ../helper-project/css/helper.css build/public_html/css/.

这会将 helpers.css 文件复制到您的构建文件夹。由于它会从您的 unique ../helper-project 文件夹中获取该文件,因此您始终会得到最新的。

除了简单的cp 命令,您还可以同时最小化该文件:

cleancss --remove-empty ../helper-project/css/helper.css > build/public_html/css/.

这里唯一的问题是,如果您对辅助项目进行更改,它不会自动更新所有项目。您仍然需要在每个项目中执行并运行生成构建文件夹并将其复制到您的服务器的脚本。然而,我发现这是一种实用的做事方式,因为这样我就知道何时进行更新,并且可以在投入生产之前测试生成的网站,一旦更新生产站点,我就可以验证它是仍然一切正常。

【讨论】:

    【解决方案2】:

    您可以使用 git(或任何现代 VCS)来执行此操作;我假设您正在为您的代码使用某种 VCS。 如果你有一个项目在 git 中管理,你甚至可以添加多个远程,这样你就可以从多个源中拉取代码。

    如果您使用的是 git 之类的 VCS,那么只要您想同步,只需执行 git pull &lt;remote ref&gt; &lt;branch ref&gt; 即可。

    否则,您问题的 cmets 会提供一些替代方案。

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 2018-02-16
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多