如何从单个节点项目发布多个 NPM 模块?
How to publish multiple NPM modules from a single node project?
问题很简单:有没有办法从单个 nodejs 项目将两个不同的 NPM 模块发布到 npmjs 注册表?
但对于那些想知道到底为什么会有人想要这样做的人来说? ... 这个问题背后的动机可能不太明显。所以请允许我解释一下:
我使用类似于称为环回的应用程序服务器的东西。我的 nodejs 应用程序整齐地分布在客户端、公共和服务器文件夹中。
我也经常需要在其他项目中重复使用 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 项目将两个不同的 NPM 模块发布到 npmjs 注册表吗?或者使用某种方法将不同的 package.json 文件用于单独的出版物,但全部来自一个项目?
更新:我的目标是什么?
通过将它们发布为 NPM 模块,在其他项目中重用我的核心项目中的模型。不放弃将我的核心项目作为一个原子实体继续开发的便利,没有 npm link
等,因为当不止一个人在处理它时,它会很快变得混乱。
有一个类似的问题,我最近发现: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.
问题很简单:有没有办法从单个 nodejs 项目将两个不同的 NPM 模块发布到 npmjs 注册表?
但对于那些想知道到底为什么会有人想要这样做的人来说? ... 这个问题背后的动机可能不太明显。所以请允许我解释一下:
我使用类似于称为环回的应用程序服务器的东西。我的 nodejs 应用程序整齐地分布在客户端、公共和服务器文件夹中。
我也经常需要在其他项目中重复使用
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 项目将两个不同的 NPM 模块发布到 npmjs 注册表吗?或者使用某种方法将不同的 package.json 文件用于单独的出版物,但全部来自一个项目?
更新:我的目标是什么?
通过将它们发布为 NPM 模块,在其他项目中重用我的核心项目中的模型。不放弃将我的核心项目作为一个原子实体继续开发的便利,没有 npm link
等,因为当不止一个人在处理它时,它会很快变得混乱。
有一个类似的问题,我最近发现: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.