相关疑难解决方法(0)

如何使用 peerDependencies 测试 npm 模块?

我是新来理解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,但是,我还不确定它是否可以在使用前配置对等依赖项,因为它将由主机包执行。

反馈和建议最受赞赏。

mocha.js node.js npm gulp-mocha peer-dependencies

25
推荐指数
2
解决办法
4904
查看次数

在多个NPM包之间共享Mongoose实例

为了将大型现有的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,ticketsdiscussions应用程序(独立的NPM包通过主机被拉package.json)使用猫鼬一样,主机应用程序本身,我们想通我们会在主机猫鼬例如通过某种environment对象,还包括其他的东西主机想要与已安装的应用共享.

你看到这种方法有任何明显的缺陷吗?在这种情况下挂载的应用程序不会将Mongoose指定为各自的依赖项package.json,并且它们不会 require('mongoose') 像通常那样完成,而是从负责将Mongoose实例连接到MongoDB的主机获取Mongoose实例.

如果这是一个坏主意,你建议每个子应用程序自己声明对Mongoose的依赖,每个NPM包将获得自己的Mongoose副本,并且每个都必须连接到MongoDB,对吧?

一些背景信息:

  • 我们确实希望将应用程序包含在主机应用程序中,在单个进程中运行,而不是具有多个Node实例.主机包含用于身份验证和其他事物的中间件.
  • 我们确实希望将应用程序作为单独开发的NPM软件包包含在我们构建的各种主机应用程序的版本化依赖项中,而不是仅将其源代码复制到主机应用程序.
  • 我们意识到在多个安装的应用程序之间重用相同的Mongoose实例将使它们共享相同的模型命名空间.

编辑:编辑完所有内容后澄清包结构npm install:

host/
  assets/
  models/
  routes/
  node_modules/
    express/ ...
    mongoose/ ...
    events/
      assets/ ...
      models/ …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js npm express

8
推荐指数
1
解决办法
2755
查看次数