我是新来理解peerDependencies,我已经阅读了以下参考资料,寻求如何测试 npm 模块在其 package.json 中包含 peerDependencies :
但是,我还没有找到使用 peerDependencies 测试 npm 的明确解决方案。有些人建议将 peerDependencies 添加为全局变量,有些人建议将 peerDependencies 包含在 devDependencies 中,但这似乎都不对。
例如,我有一个具有对等依赖项的包,一个自定义记录器,并且该记录器需要由其主机包配置才能使用。
这是我使用此 Gulp 任务执行大多数脚本测试的方式:
function testRunner() {
return (
gulp
.src('./tests/**/*.js', { read: false })
.pipe(
mocha({
exit: true,
timeout: 10000
})
)
.on('error', console.error)
);
}
Run Code Online (Sandbox Code Playgroud)
我确实收到了一个有用的建议(请参阅下面的评论,@estus)使用npm-install-peers,但是,我还不确定它是否可以在使用前配置对等依赖项,因为它将由主机包执行。
反馈和建议最受赞赏。
为了将大型现有的Node + Express + Mongoose应用程序模块化为多个可安装的应用程序,每个应用程序都作为单独的NPM包开发,我们想知道在它们之间共享一个Mongoose实例是否是一个好主意?
假设我们有一套NPM包,每个包含客户端资产,Mongoose模型和使用Express实现的REST-API.它们确实具有一些共同特征,但基本上被认为是单独的可重复使用的人工制品.主机应用程序(也是基于Express的)在各种根URI下安装它们:
var discussions = require('discussions'),
tickets = require('tickets'),
events = require('events'),
express = require('express'),
app = express();
var environment = { ...see below... };
...
app.use('/events-api', events(environment));
app.use('/tickets-api', tickets(environment));
app.use('/discussions-api', discussions(environment));
Run Code Online (Sandbox Code Playgroud)
现在,由于events,tickets和discussions应用程序(独立的NPM包通过主机被拉package.json)使用猫鼬一样,主机应用程序本身,我们想通我们会在主机猫鼬例如通过某种environment对象,还包括其他的东西主机想要与已安装的应用共享.
你看到这种方法有任何明显的缺陷吗?在这种情况下挂载的应用程序不会将Mongoose指定为各自的依赖项package.json,并且它们不会 require('mongoose')
像通常那样完成,而是从负责将Mongoose实例连接到MongoDB的主机获取Mongoose实例.
如果这是一个坏主意,你建议每个子应用程序自己声明对Mongoose的依赖,每个NPM包将获得自己的Mongoose副本,并且每个都必须连接到MongoDB,对吧?
一些背景信息:
编辑:在编辑完所有内容后澄清包结构npm install:
host/
assets/
models/
routes/
node_modules/
express/ ...
mongoose/ ...
events/
assets/ ...
models/ …Run Code Online (Sandbox Code Playgroud)