在不使用相对路径的情况下重用我自己的 JavaScript 模块

Reusing my own JavaScript modules without using relative paths

我是 JavaScript 开发的新手,可以就如何最好地使用我自己创建的多个模块提出一些建议。

模块 1 --src ----a.js ----b.js

模块 2 --src ----c.js ----d.js

模块 3 --src ----e.js ----f.js

模块 4 --src ----g.js ----h.js

现在每个模块都是 js 文件的集合,这些文件使用 module.exports 导出他们需要的功能。

本例中Module1和Module2是库模块。 Module2 依赖于 Module1。这两个模块都与平台无关,可以 运行 在浏览器或 nodejs 中。

Module3 是一个项目模块,它依赖于 Module2 和 Module1。它专为浏览器设计,并使用 browserify 将它们全部组合成一个包。

Module4 是另一个项目模块,它也依赖于 Module2 和 Module1。这是为了在nodejs下运行设计的

每个模块都有自己的 git 存储库。

现在我遇到的问题是 require 中的相对路径。例如 c.js 当前确实 require("../../Module1/src/a.js");同样 h.js 确实需要("../../Module2/src/c.js");

这导致文件夹结构非常痛苦,每个项目都必须以正确的设置从 git 克隆。

以下是我正在努力实现的目标。

  1. 为了取消相对路径,所以我只需要 ("ModuleX/src/foo.js");这需要与 browserify 和 nodejs 一起使用。

  2. 从 git 克隆一个项目模块并让它获得所有依赖模块(也许 git 子模块?)。不关心文件夹结构,因为这应该使用上面提到的点来解决。

  3. 克隆项目及其依赖模块后,就可以编辑这些模块中的每一个,进行更改并将它们推送到各自的 git 存储库。

我想我正在尝试做的是非常标准的。创建我自己的模块并在不同的项目中重复使用它们。我是否尝试以标准方式解决它?我读过有不同的方法可以使用 NODE_PATH 来实现这一点,节点和 browserify 都支持它,但都不鼓励它。 Browserify 支持路径选项但不适用于节点。另请阅读有关将模块放入 node_modules 中的信息,但不确定这对相对路径有何帮助。

任何建议将不胜感激

谢谢

您可能想要做的是将您的可重用代码提交到 git(这里是 GitHub),然后是 npm install <git remote url>:。例如 npm install git+https://isaacs@github.com/npm/npm.git。另一方面,您的回购需要一个 package.json 和一个 index.js 来保存您的代码或指向它。或者,您可以通过 main:"" 键在 package.json 中定义主文件的位置。

这些项目之间的依赖关系将在各自的 package.json 中定义。安装后 npm 避免循环依赖、缓存等很神奇

完成所有操作后,如果您愿意,您可以 var x = require("ModuleX") 获得 ModuleX/src/foo.js

或者使用 npms 私有模块。