node.js - 如何从单个 Node 项目发布多个 NPM 模块?

标签 node.js npm strongloop

问题很简单:有没有办法将两个不同的 NPM 模块从单个 nodejs 项目发布到 npmjs 注册表?

但是对于那些想知道为什么有人甚至想要这样做的人? ...这个问题背后的动机可能不太明显。所以请允许我解释一下:

我使用类似于称为 loopback 的应用服务器的东西。我的 nodejs 应用程序整齐地分布在客户端、公共(public)和服务器文件夹中。

  1. 我经常需要在其他项目中重复使用我的 common 文件夹中的模型。尽管我可以通过使用 .npmignore 删除其他内容,将该文件夹作为单独的 NPM 模块发布: /* /常见/实用程序 /common/models/*.js !/common/models/*.json

    我无法从当前发布的 package.json 中删除杂乱无章的内容,这是实际运行我的应用程序所必需的。 $ npm 包 $ tree -L 2 ~/dev/w2/node_modules/warehouse ~/dev/w2/node_modules/仓库 ├── README.md ├── 常见 │   └── 型号 ├── Node 模块 │   ├── ... │   └── ... └── package.json 就目前情况而言,我过滤掉了 common/models 文件夹以外的所有内容,但由于我不确定如何在打包之前动态调整 package.json 文件或作为打包的一部分...... npm install 将放下真正不需要的依赖项。

  2. 我对单独创建一个单独的项目并在其中包含模型并不感到兴奋,因为这迫使我将其作为依赖项添加到核心项目中,并且积极的开发被拆分到过去的 2 个项目中只有一个。 npm link 等是解决它的好方法,但它增加了开发人员在新人入职时设置的复杂性,并确保没有人 checkin 错误的东西。

那么有没有办法将两个不同的 NPM 模块从单个 nodejs 项目发布到 npmjs 注册表?或者以某种方式将不同的 package.json 文件用于单独的发布,但全部来自一个项目?


更新:我的目标是什么?

通过将我的核心项目中的模型发布为 NPM 模块,在其他项目中重用它们。不放弃继续将我的核心项目开发为一个没有 npm 链接 等的原子实体的便利,因为当不止一个人在处理它时,这会很快变得困惑。

最佳答案

有一个类似的问题,我最近发现:https://github.com/lerna/lerna ,可能对你有用。

来自自述文件:

Splitting up large codebases into separate independently versioned packages is extremely useful for code sharing. However, making changes across many repositories is messy and difficult to track, and testing across repositories gets complicated really fast.

To solve these (and many other) problems, some projects will organize their codebases into multi-package repositories (sometimes called monorepos). Projects like Babel, React, Angular, Ember, Meteor, Jest, and many others develop all of their packages within a single repository.

Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

关于node.js - 如何从单个 Node 项目发布多个 NPM 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957131/

相关文章:

javascript - StrongLoop:子表的 ACL

Strongloop:与 uuid 的多态 HasAndBelongsToMany 关系

node.js - NodeJS 中的 CoffeeScript 示例?

node.js - Sails.js - PATH 变量 - 无法识别 sails 命令

node.js - 如何将 'phantomjs' 包引用更新为 'phantomjs-prebuilt' - 来自 Mac OS 终端的消息

javascript - 如何在strongloop环回中使用mongoDB的提示运算符?

javascript - 为什么在这种情况下我不能使用 socket.emit.broadcast ?

javascript - nodejs 加密模块 privateEncrypt() 总是返回相同的结果

flex3 - Adobe Flex 作为 Node.js 客户端

angular - 如何在 npm 上发布 angular 2 typescript 库