2012-05-16 130 views
4

在我的節點projcet中,我使用main.js作爲入口點將獨立模塊構建到文件夾中,並在與不同文件相同的文件夾中找到該模塊的helpers。什麼是package.json中的依賴關係 - nodejs

Ex: 
Aggregator: 
    |___package.json 
    |___main.js 
    |___node_modules 
     |_____helper1.js 
     |_____helper2.js 

因此節點將解決所有我的助手的模塊[例:聚合]依賴當地node_modules文件夾。原因上面的結構是,我並不需要關心的道路上require

我用的package.json指定入口點是main.js櫃面require是聚集

Ex: 
//Sample.js 
require('Aggregator'); // Resolves to Aggregator/main.js 

例如: 的package.json聚合器模塊的

{ 
     "name": "Aggregator" 
     , "description": "Returns Aggregates" 
     , "keywords": ["aggregate"] 
     , "author": "Tamil" 
     , "contributors": [] 
     , "dependencies": { 
      "redis": "0.6.7" 
     } 
     , "lib"   : "." 
     , "main"   : "./main.js" 
     , "version"  : "1.0" 
    } 

這裏什麼是依賴列?我提到了this的鏈接。即使我將redis的版本指定爲10000,但沒有任何警告,我的代碼似乎仍然有效。我嘗試從項目中刪除我的redis模塊以測試節點是否拾取它並解析依賴項,但是它沒有。什麼時候在package.json中使用這個依賴屬性?這僅僅是爲了將來的參考嗎?

npm version 1.1.0-beta-4; 節點版本v0.6.6

回答

6

dependencies值用於指定給定模塊(由package.json表示)需要工作的任何其它模塊。當您從給定模塊的根文件夾運行npm install時,它將安裝該dependencies散列中列出的所有模塊。

如果你沒有在redis: 10000那裏列出任何錯誤,我的猜測是你從來沒有跑過npm install,因此它甚至從來沒有嘗試安裝redis。反過來,如果你的代碼在沒有運行npm install的情況下工作正常,那麼很可能你的代碼甚至不需要首先使用redis,並且該項目應該從dependencies散列中刪除。

儘管不是package.json中的每個條目都是日常開發必不可少的東西,但是dependencies絕對重要。我會建議通過dependencies section on the npm website閱讀。

+0

現在很清楚:) Nice Catch :) – Tamil

+0

那麼,爲我們構建的本地模塊使用package.json是否是不必要的或不可取的?因爲如果我在我的項目文件夾中運行'npm install',它會引發錯誤,因爲它們確實不是在任何地方找到的包,而只是我的本地代碼,因此依賴關係未解決。我的意思是Aggregator不是一個包,而是由我構建的模塊,它依賴於redis。那麼如何解決它們呢? – Tamil

+1

對於本地開發的模塊的已發佈依賴項,使用'package.json'仍然是可取的。但是,如果你需要在另一個本地開發的模塊中使用本地開發的模塊,你可以選擇一些選項,其中最好的選項通常是使用'npm link'。使用'npm link',你可以進入* ModuleA *的根文件夾,只需輸入'npm link'。然後從* ModuleB *的根文件夾中,輸入'npm link module-a-name'。然後從* ModuleB *的任何地方開始,你可以簡單地'require('module-a-name')',就像你已經安裝在node_modules中一樣(即使它不是)。 – jmar777

相關問題