2016-09-23 9 views
0

Я пытаюсь создать библиотеку, которая использует ORM Bookshelf.js (так что в основном это оболочка поверх Bookshelf.js, если хотите). Теперь Bookshelf.js требует, чтобы вы запускали установку драйвера, чтобы иметь возможность подключиться к правильной базе данных (например: npm install mysql) в корне вашего проекта.Как передать библиотеку более низкую зависимость в узле?

Моя собственная библиотека также требует этого, так как Bookshelf.js требует его, но он продолжает говорить Error: Cannot find module 'mysql', что нормально, поскольку экземпляр Bookshelf не имеет зависимости mysql в своей папке node_modules.

Если я печатаю из структуры она будет выглядеть следующим образом:

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

Теперь Bookshelf.js вероятно, требует такой структуры:

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

Есть ли способ, что я могу еще получить книжная полка, работающая с показанной первой структурой?

P.S. Я знаю, что объяснение может сбивать с толку, но это сложная проблема, и у меня нет другого способа объяснить это.

ответ

0

Пусть клиент вашего модуля перевала в экземпляре на книжную полку:

// 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 
+0

Спасибо за ваше предложение! В настоящее время я делаю это, но я хочу избежать дополнительной зависимости, чтобы пользователь мог использовать это. Есть также больше проблем с регистрацией плагинов и другими, что затрудняет мне работу. Есть ли другой способ решить эту проблему? –

+0

Это может быть личный вкус, но я не понимаю, почему это было бы недостатком. Он позволяет пользователю настраивать 'knex' и' bookshelf' по своему вкусу перед использованием вашего модуля. Это также делает зависимости очевидными для пользователя вашего модуля. – forrert

+0

Хорошо, рассмотрев это решение, я вернусь обратно к передаче экземпляра книжной полки вместо этого. Спасибо за помощь! :) Я буду отмечать этот ответ как правильный, поскольку он является самым чистым, который не требует ввода путей в переменную module.paths. –