我们的应用程序由两个组件组成:API 和客户端。两者都是独立的 Node 应用程序。虽然 API 除了文档之外实际上没有任何前端组件,但它们仍然共享一些公共(public)文件,例如 Jade 组件、规范化 CSS、实用程序模块以及最重要的 Mongoose 用于 MongoDB 交互的模式和模型定义。我真的不想习惯我首先更改 API,然后将更改的文件复制到客户端或反之亦然的工作流程,因此为此找到一个可行的解决方案会很棒。
跨 Node 应用程序共享杂项代码的最佳方式是什么?
在浏览网页时,我遇到了几个解决方案,但在这种情况下没有一个真正有效。
一种解决方案是从公共(public)文件中创建一个 Node 模块,并使用 NPM 在应用程序之间保持同步,但这意味着我(以及 future 可能的开发人员)必须知道哪些文件是公共(public)模块的一部分,并使用 require('node_modules/mongo/schemas/example.js')
而不是 require('mongo/schemas/example.js')
来要求它们。由于假设可能有数百个通用文件,因此不可能记住文件是否通用,尤其是对于新开发人员而言。
另一种解决方案是为通用模块创建一个 git 子模块。这将是完美的,如果我可以将子模块路径包含到 Node 的 require 路径中,以防万一它没有在预期的位置找到所需的文件(例如,mongo/schemas/example.js
),它会在公共(public)子模块 (common/mongo/schemas/example.js
) 中查找。这太棒了,因为它允许用“本地”版本覆盖普通文件。这有点像 Magento 的作品。这里的问题是 Node 不允许编辑 require 路径(至少不再允许,据说在 Node 0.5 之前是可能的),所以这很糟糕。
第三种解决方案是粗暴地将公共(public)存储库的内容 merge 到应用程序的根目录中。这个解决方案没有真正无法克服的问题,但我只是觉得这是一种不好的做法。毕竟,这将无法通过应用程序编辑公共(public)文件,因为无法选择性地将公共(public)文件推送到公共(public) git 存储库中。所以基本上这个解决方案只会让工作流程更加乏味:对公共(public)文件的所有修改都必须手动复制到公共(public)代码库,推送到 git 远程,然后复制到另一个应用程序。所以这个解决方案绝对不适合我。
似乎第二种解决方案是我唯一(也是最好)的选择,除非你们想出更好的解决方案(我真的很希望 :D)。如果有人知道更改 Node 的 require 路径的方法,我将不胜感激。
最佳答案
One solution is to make a node module out of the common files and keep it in sync between the apps with NPM
这是唯一一个好的解决方案。如果您有共享代码,它应该是一个模块。
but that would mean I (and possible future devs) have to know which files are part of the common module, and require them with require('node_modules/mongo/schemas/example.js') instead of require('mongo/schemas/example.js') for example
没有。它是 require('mongo/schemas/example.js')
而不是 require('./mongo/schemas/example.js')
。或者更好的是,require('mongo').Schemas.example
,尽管它需要一些工作。
您必须将代码库拆分为逻辑模块。我想你在那里遇到的那种噩梦证明使用 NODE_PATH 是合理的,但我真的建议重构它......
关于node.js - 在 Node 应用程序之间共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461465/