2012-09-25 46 views
1

我是Node.js回聲系統的新手,嘗試爲JavaScript應用程序開發設置構建系統。我有一些我無法找到答案的問題。使用NPM&gruntjs構建系統

this blog post,顯然您應該在本地安裝所有項目特定的節點模塊。

現在,我在本地項目目錄中安裝整個grunt模塊。我得到以下目錄結構...

my_project/ 

    lib/ 
    utils/ 
     underscore.js 

    ... other project files ... 

    node_modules/ 
    .bin/ 
     grunt -> ../grunt/bin/grunt* 
    grunt/ 
     node_modules/ 
     bin/ 
     dev/ 
     docs/ 
     lib/ 
     test/ 
     tasks/ 
     grunt.js 
     package.json 
     ... others ... 

請注意,有兩個node_modules目錄。一個在我的項目中,另一個在grunt模塊中。

問::爲什麼在不同層次上有多個node_modules目錄?有人能向我解釋目錄結構是如何工作的嗎?

問題:如果我安裝了另一個模塊,它是否也有自己的node_modules目錄?

Q:如果我去內my_project/lib/utils然後運行命令npm install <some_module>,將這個模塊只能安裝該目錄或整個項目?如果是後者,那麼NPM/Node如何找出項目根?

請解釋一下我在這裏可能會丟失的其他東西。

回答

4

npm註冊表中的每個項目都可以被認爲是一個獨立的模塊(特別是CommonJS模塊),它具有在該項目的根目錄中的package.json文件中定義的源代碼和項目元數據。

當你鍵入一個package.json文件的目錄npm install(或只是npm i),NPM讀取dependencies在項目的根目錄中package.json定義的集合,並在node_modules目錄中安裝這些程序包。

那麼嵌套的node_modules目錄是什麼? npm install是遞歸的。如果項目A需要B和B需要C,你會看到這樣的目錄結構:

A/ 
A/node_modules 
A/node_modules/B 
A/node_modules/B/node_modules 
A/node_modules/B/node_modules/C 

在你的情況,當你在my_project/package.json文件添加到gruntdependencies,這種依賴將添加到其自身的目錄: my_project/node_modules/grunt。但grunt有很多依賴關係,而這些依賴關係具有依賴關係。所以你會看到很多嵌套的node_modules目錄。

對於第三個問題,請參閱本頁上的algorithm部分:https://npmjs.org/doc/install.html - 它描述了npm install如何搜索依賴關係。

在npm here中還有一些關於全局vs局部依賴關係的更多信息。