如何将库传递给节点中的较低依赖项?

How can I pass a library to a lower dependency in node?

我正在尝试创建一个使用 ORM Bookshelf.js 的库(如果您愿意的话,基本上是 Bookshelf.js 之上的一个包装器)。现在 Bookshelf.js 需要您 运行 安装驱动程序才能连接到项目根目录中的正确数据库(例如:npm install mysql)。

我自己的图书馆也需要这个,因为 Bookshelf.js 需要它,但它一直说 Error: Cannot find module 'mysql' 这是正常的,因为 Bookshelf 实例在其 node_modules文件夹。

如果我输入结构,它将如下所示:

* New Project
** mysql
** LibThatUsesBookshelf
**** Bookshelf

现在Bookshelf.js可能需要这样的结构:

* New Project
** LibThatUsesBookshelf
**** mysql
**** Bookshelf

有没有办法让书架与显示的第一个结构一起工作?

P.S。我知道解释可能会令人困惑,但这是一个难题,我没有其他解释方式。

让你模块的客户端传入一个实例给bookshelf:

// mysuperfancymodule.js
module.exports = function(bookshelf) {
    // do fancy things with the bookshelf instance
}

然后在您的客户端应用程序中:

// some app code:
var mySuperFancyModule = require('mysuperfancymodule'); // assuming it is published to npm
var knex = require('knex')({
    // init knex...
});
var bookshelf = require('bookshelf')(knex);

mySuperFancyModule(bookshelf); // init my super fancy module