2016-11-23 9 views
0

はしばらくどのようにNPM/Node.jsのは、ローカルnode_modules/.binファイルディレクトリにパス解決をするのか

のために、この混乱関係私は「fooというNPMモジュール内の実行可能ファイルを(CLI/exec.js)持っています「そうのように:package.jsonで

/foo 
--/cli 
    exec.js 
--/lib 
package.json 

、我々が持っている:

このモジュールがインストールされる
"name": "foo", 
    "bin": { 
    "exec-foo": "cli/exec.js" 
    } 

を、NPMをインストールし、node_modules次のようになります。

0どのようにNode.jsのは今のexec-fooということを、必要機能を持つモジュール/依存関係の解決をしますか:私のがらくたを混乱させる何
--/node_modules 
---/.bin 
    exec-foo 
---/foo 
---/lodash 
---/async 
---/whatev 

.........

... .jsファイルはもはや以前はプロジェクト内にあった場所ではなく、現在はnode_modules/.binにありますか?これについて簡単な説明はありますか?

答えて

2

NodeJSの解像度は、the documentationで詳しく説明されています。

require()に渡されたモジュール識別子がネイティブモジュールでなく、 '/'、 '../'、または './'で始まらない場合、Node.jsは親現在のモジュールのディレクトリに移動し、/ node_modulesを追加し、その場所からモジュールをロードしようとします。ノードは、すでにnode_modulesで終わっているパスにnode_modulesを追加しません。

node_modules/.bin/exec.jsは、元のファイルへのポインタであるシンボリックリンクになります。

NodeJSは元のファイルパスをチェックし、必要なモジュールの解析を開始します。それが現在のnode_modulesに見つからない場合は、あなたのライブラリが見つかるまで、1つ上のディレクトリに移動します。

ライブラリが見つからない場合は、エラーが発生します。

+0

yep鍵部分は./node_modules/.bin/*のファイルが./node_modules/*のファイルへのシンボリックリンクであることです –

関連する問題