【发布时间】:2014-02-23 01:11:19
【问题描述】:
我们的应用由两个组件组成:API 和客户端。两者都是独立的 Node 应用程序。虽然 API 除了文档之外实际上没有任何前端组件,但它们仍然共享一些通用文件,例如 Jade 组件、规范化 CSS、实用程序模块,最重要的是 Mongoose 用于 MongoDB 交互的模式和模型定义。我真的不想习惯这样的工作流程,我首先对 API 进行更改,然后将更改的文件复制到客户端,反之亦然,因此找到一个可行的解决方案会很棒。
在 Node 应用程序之间共享杂项代码的最佳方式是什么?
在浏览网页时,我遇到了几个解决方案,但在这种情况下,它们都没有真正起作用。
一种解决方案是从公共文件中创建一个节点模块,并使用 NPM 在应用程序之间保持同步,但这意味着我(以及未来可能的开发人员)必须知道哪些文件是公共模块的一部分,并要求他们使用 require('node_modules/mongo/schemas/example.js') 而不是 require('mongo/schemas/example.js') 例如。由于假设可能有数百个通用文件,因此无法记住文件是否通用,尤其是对于新开发人员而言。
另一种解决方案是制作公共模块的git子模块。这将是完美的,只要我可以将子模块路径包含到 Node 的 require 路径中,所以如果它在预期的位置(例如,mongo/schemas/example.js)找不到所需的文件,它会在公共子模块中查找(@ 987654325@)。这太棒了,因为它允许用“本地”版本覆盖公共文件。这有点像 Magento 的作品。这里的问题是 Node 不允许编辑 require 路径(至少,据说在 Node 0.5 之前它是可能的),所以这很糟糕。
第三种解决方案是将公共存储库的内容粗暴地合并到应用程序的根目录中。这个解决方案没有真正无法克服的问题,但我只是觉得这是一种不好的做法。毕竟,通过应用程序编辑公共文件是不可能的,因为没有办法选择性地将公共文件推送到公共 git 存储库中。所以基本上这个解决方案只会让工作流程更加乏味:对公共文件的所有修改都必须手动复制到公共代码库,推送到 git 远程,然后复制到其他应用程序。所以这个解决方案也绝对不适合我。
似乎第二种解决方案是我唯一(也是最好的)选择,除非你们想出一个更好的选择(我真的很希望 :D)。如果有人知道更改节点所需路径的方法,我将不胜感激。
【问题讨论】:
-
很好的问题。我听到有人说您应该将所有代码放在 npmjs.org 中。但这只有在您可以开源的情况下才可行。你可以创建一个私有的 npm repo,但我从来没有这样做过。 stackoverflow.com/questions/7575627/…
标签: node.js git version-control npm