如何从单个节点项目发布多个NPM模块?

pul*_*hal 10 node.js npm strongloop

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

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

我使用的东西类似于一个名为loopback的app-server.我的nodejs应用程序整齐地分布到客户端,公共和服务器文件夹中.

  1. 我经常需要在我的common文件夹中重用其他项目中的模型.虽然我可以通过使用.npmignore删除其他东西将该文件夹作为单独的NPM模块发布: /* /common/utils /common/models/*.js !/common/models/*.json

    我无法package.json从已发布的内容中删除实际运行我的应用程序所需的当前杂乱. $ npm pack $ tree -L 2 ~/dev/w2/node_modules/warehouse ~/dev/w2/node_modules/warehouse ??? README.md ??? common ?   ??? models ??? node_modules ?   ??? ... ?   ??? ... ??? package.json 事实上,我过滤掉了除了我的common/models文件夹以外的所有内容,但是因为我不确定如何在打包之前动态调整package.json文件或者作为打包它的一部分...一个npm install将放下真正不属于的依赖关系需要.

  2. 我不喜欢单独使用模型创建一个单独的项目,因为这迫使我将其添加为核心项目的依赖项,并且活动开发分为两个项目,它们曾经只是一个项目.npm link等等是一种很好的方法来解决它,但它增加了开发人员设置的复杂性,当新人加入并确保没有人检查错误的东西.

那么有没有办法从单个nodejs项目向npmjs注册表发布两个不同的NPM模块?或者某种方式使用不同的package.json文件进行单独的发布但所有来自一个项目?


更新:我的目标是什么?

通过将其作为NPM模块发布,从我的核心项目中重用其他项目中的模型.没有放弃继续开发我的核心项目作为一个原子实体没有npm link等的便利,因为当不仅仅是一个人正在努力它时,它会变得混乱.

cmr*_*rgo 5

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

从自述文件:

将大型代码库分成单独的独立版本的软件包对于代码共享非常有用。但是,跨许多存储库进行更改很麻烦且难以跟踪,并且跨存储库的测试变得非常复杂。

为了解决这些(以及许多其他)问题,一些项目会将其代码库组织到多包存储库中(有时称为monorepos)。Babel,React,Angular,Ember,Meteor,Jest等项目以及其他许多项目都在单个存储库中开发了所有软件包。

Lerna是一种工具,可以优化使用git和npm管理多包存储库的工作流程。