2016-06-28 29 views
0
Module A 
│ 
└─ Module B (devDependency in Module A's package.json) 
    │ 
    └─ Module C (dependency in Module B's package.json) 

モジュールBは私が開発しているものです。しかし、私はモジュールCがモジュール012で呼び出されることを知っていますrequire('Module C')。そして私が持っているエラーはCannot find module 'Module C'です。NodeJSの子モジュールの子モジュールを親モジュールにインポートさせる方法

私の現在のソリューションがある醜いです:私はそこに期待していますモジュールBモジュールA

require('Module_B').Module_C 

exports.Module_C = require('Module_C) || require(path.resolve(__dirname, 'node_modules/Module_C/index'); 

のindex.jsで

はそれを行うには良い方法です。 。

+0

モジュールAがrequireモジュールCを実行する場合、モジュールAの直接の依存関係である必要があり、NPMはそれをモジュールAが直接利用できるようにします。最新のNPMは、AとBの両方から同じモジュールCを使用できるように、依存モジュールをよりフラットな階層に保ちます(ただし、両方の依存モジュールとして個別にリストされる必要があります)。 – jfriend00

+0

モジュールCをモジュールAの依存関係にしない場合は、AがBから 'require( 'Module_B')。Module C'のようにそれを得ることができるように、Bのインターフェースをプロキシする必要があります。それらはあなたの2つの最良の選択肢です。 NPMがそれを利用可能にするか、それを代理するように依存関係を作ります。モジュールBのファイル階層に到達してモジュールAからモジュールCに到達することもできますが、これは推奨される方法ではありません。 – jfriend00

+0

私はそれがそれをすることを知っています。しかし、Module_CのようにModule_D、Module_Eがあり、Module_BのユーザーであるModule_AがnpmにModule_C/D/Eをインストールすることを望まない人がいます。私はそのユーザーがModule_Bをインストールすることができればいいと思う。 –

答えて

1

モジュールは継承されません。

システム内の2つの異なる場所で同じモジュールが必要な場合は、2つの異なる場所でモジュールを必要とするだけです。

// A.js 
var C = require("./modules/c"); 
var B = require("./modules/b"); 


// B.js 
var C = require("./modules/c"); 
module.exports = { }; 

// C.js 
module.exports = { }; 

ファイル(またはファイルのルート)必要に移動し、その後、モジュールのサブセクションをインポートする必要がある場合。

// app.js 
var add = require("./lib/helpers/math/add"); 

使用すると、1つのモジュールの内部の複数のモジュールの機能を提供しようとしている場合は、あなたが探していることは、あなたがのためのAPIを作成するサービスである、抽象的にエンドユーザーが望むものあなたが触れる必要があるすべての場所から、それを行うために行うことができます。

そのサービス/ライブラリが基本的に他のインターフェイスを独自のインターフェイスに拡張しているだけです。

関連する問題