我在node中有几个应用程序,它们都共享我编写的几个模块.这些模块无法通过npm获得.我希望能够在应用程序之间自由共享,但我不想复制周围的目录,也不想依靠Git来实现.我也不太喜欢使用符号链接来实现这一点.

我想安排如下目录:

app1
 server.js
 node_modules
  (public modules from npm needed for app1)
 lib
  (my own modules specific to app1)

app2
 server.js
 node_modules
  (public modules from npm needed for app2)
 lib
  (my own modules specific to app2)

shared_lib
 (my own modules that are used in both app1 and app2)

我看到的问题是,shared_lib中的模块似乎对在哪个应用程序的node_modules目录中查找模块感到困惑.至少我认为这就是问题所在.

所以有什么好方法可以避免文件重复?(请注意,我不关心 node _模块中的重复内容,因为这些不是我的代码,我不会将它们签入Git等)

推荐答案

我在不同的级别上有node_modules个文件夹, node 会自动向上遍历,直到找到模块.

注意:您不必发布到npm,就可以在node_模块中拥有一个模块——只需使用:

"private": true

在你的每个私有package.json个文件中——对于你的项目,我会有以下内容:

app1
 server.js
 node_modules
  (public modules from npm needed for app1)
  (private modules locally needed for app1)

app2
 server.js
 node_modules
  (public modules from npm needed for app2)
  (private modules locally needed for app2)

node_modules
  (public modules from npm needed for app1 & app2)
  (private modules locally for app1 & app2)

重点是 node .js已经有了一个处理这个问题的机制,这非常棒.只要把它和"私有不在NPM上"结合起来,你就可以开始了.

简而言之:

require('somemodule')

从应用程序A或B开始,它会向上层叠,直到找到模块——不管它是生活在下层还是上层.事实上,这使您可以热交换位置,而无需更改require(...)条语句中的任何一条.

node.js module documentation

Node.js相关问答推荐

如何在RavenDB中执行JS索引?

如何修复PostgreSQL和NodeJS/NestJS应用程序之间的日期时间和时区问题?

条件内的表达式

填充函数在Node.js和MongoDB中不起作用

ForbidenError:使用Express.js的CSRF令牌无效

如果我在父文件夹中运行,子进程生成不起作用

2023年如何在Node.js中使用Gmail发送邮箱?

yarn 安装失败,因为 node-gyp 正在寻找过时的 node 版本标头

如何在mongoose 聚合中执行全文搜索

看起来这段代码try GET 请求发送的值变为空白

Axios 响应循环通过函数只返回第一个映射对象的结果

nvm / node / npm: node 12 的 npm 比 node 14 的更新?

如何使用 Jest 模拟异步函数的延迟时间

mongoose.model() 方法返回未定义

如何从 github 编译第三方扩展?

Socket IOFlutter 未连接

响应发送 200 而不是 403

调用 require 时的 const vs let

Puppeteer 记录在 page.evaluate

node --experimental-modules,请求的模块不提供名为的导出