2017-09-18 4 views
0

ノードのrequireメソッドが相対パスを解決する方法を理解できません。node.jsはメソッドの相対パスの解釈をどのように必要としますか?

のは、私はこのようなファイル構造を持っているとしましょう:

root 
|--- main.js 
| 
|--- importantUtilities.js 
| 
|--- apps 
    | 
    |--- app1.js 

/root/main.js/root/apps/app1.js両方が/root/importantUtilities.jsを必要とする場合、彼らは異なっrequire機能パラメータ設定:

// File: /root/main.js 

... 
require('./importantUtilities.js'); 
... 

// File: /root/apps/app1.js: 

... 
require('../importantUtilities.js'); 
... 

をする必要はありません前もって__dirnameと書かれていますが、この情報がないとrequireがどのように機能するのかわかりません。

requireを実装して、ファイル記述子ごとに同じファイルを返すことはできますか?

EDIT:次の例は、(同じファイル構造を使用して)私の心を吹くにも働くという事実:

// File: /root/main.js: 

... 
module.exports.getUtilities = function() { return require('./importantUtilities.js'); }; 
var utilities = module.exports.getUtilities(); // Works fine 
... 

// File: /root/apps/app1.js: 

... 
var main = require('../main.js'); 
var utilities = main.getUtilities(); // Works fine 
... 

requireでも呼び出すスコープから基本パスを決定していないようです。ソースコード内に何らかの形でrequireが出現すると、ソースコードのファイルパス情報にバインドされるようになります。これは正しいです?

どのように動作しますか?

答えて

0

ソースコードに必要のすべての発生は、ソースコードのファイルパス情報

はい、それはまさに正しいだとバインドされています。 docsによれば、より正確:

は、X 'が./' または '/' または 'で始まる場合

    1. パスY

      にモジュールから(X)が必要../ '

      a。 LOAD_AS_FILE(Y + X)

  • すなわち、それはパスがrequire Dされた状態で現在のファイルのパスを連結します。

    +0

    これはほとんど前処理に似ています!正確に私が探していたドキュメントリンク:D –

    関連する問題