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

时间:2016-09-23 16:25:32

标签: node.js bookshelf.js knex.js

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

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

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

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

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

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

有没有办法让我能够使用第一个结构显示书架?

P.S。我知道解释可能会让人感到困惑,但这是一个很难解决的问题,我没有办法解释它。

1 个答案:

答案 0 :(得分:0)

让模块的客户端将实例传递给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