2012-05-16 202 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

相关问题