2016-09-23 13 views
0

私はORM Bookshelf.jsを使用するライブラリを作成しようとしています(もしそうなら、基本的にはBookshelf.jsの上にあるラッパー)。現在、Bookshelf.jsでは、プロジェクトのルートにある正しいデータベース(例:npm install mysql)に接続できるように、ドライバのインストールを実行する必要があります。ノードの下位依存関係にライブラリを渡すにはどうすればよいですか?

Bookshelf.jsにはそれが必要なので、自分自身のライブラリにも必要ですが、Bookshelfインスタンスのnode_modulesフォルダには通常はないので、通常はError: Cannot find module 'mysql'となります。私はそれが次のようになり構造を入力した場合

* 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変数にパスを注入する必要のない最もクリーンなものですからです。 –

関連する問題