我想尝试一些node.js的东西,我昨天按照网上的某些指示安装了它,并启动并运行了,我在屏幕上显示了标准的Hello World网页。
我现在转到另一个例子,但是为了不弄乱我的主目录,我创建了一个目录(〜/ node)并在那里创建了我需要的文件。低,看,当运行服务的时候,我没有高兴地说找不到express
模块。
说明告诉我使用-g
标志安装express,但这没有帮助。我甚至没有运气就跑了。
现在我发现了这个: Cannot find module `express` | socket.io [node.js]
似乎我必须在当前目录下再次安装它。我已经做到了,它的确有效。它是否必须安装在我想要运行服务的每个目录下?这似乎是一种不必要的重复。
编辑:
我不太了解js,我以为我会去挖掘并找到
app.use(express['static'](__dirname ));
并且意识到这可能是我的问题的原因。进一步的研究发现:http://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders如果我在更高级别的目录中安装一次,那就应该“解决”我的问题。我不打算卸载模块,但对于我的下一个项目,我会尝试一下,看看它是怎么回事。
我不知道为什么原作者在安装快递时建议使用-g
标志,因为它似乎对我不起作用。
答案 0 :(得分:5)
NPM是一个非常好的工具,允许您在本地和全局安装node.js模块。
如果要为项目使用模块,则必须在本地安装。 这就是为什么 npm 在项目目录中创建一个名为node_modules的子目录。 如果您对两个不同的项目使用相同的模块,npm将下载模块并安装两次。这是完全正常的,它可以帮助您管理相同依赖项的不同版本。
管理特定项目的依赖关系和安装模块的最佳方法是使用您的依赖项填充package.json并使用
安装它们npm install
在项目目录中。
要访问代码中的模块,请使用 require()功能。 例如,使用expressjs:
var express = require('express');
var app = express();
...
npm 允许您全局安装模块。但请记住,全局安装模块只能在终端中提供更多命令,就像expressjs和express(1)一样。
要在全球范围内安装expressjs,请在终端
中运行npm install -g express
如果要在特定项目中使用全局安装的模块,还必须在本地安装(在项目目录中,不使用-g)。
我希望这清楚地回答你的问题。
答案 1 :(得分:1)
Express能够在全局安装时生成简单的应用程序结构。请参阅此link并滚动至使用快速(1)生成应用部分。这是让你轻松上手的好方法。
答案 2 :(得分:0)
查看package.json,package.json in nodejitsu
所有npm包都包含一个文件,通常在项目根目录中,名为package.json - 该文件包含与项目相关的各种元数据。该文件用于向npm提供信息,使其能够识别项目以及处理项目的依赖性
package.json
示例:
{
"name": "CRUD",
"description": "A simple CRUD",
"author": "Only for learn",
"dependencies": {
"express": "*",
},
}
所以要安装dependencies
,请转到package.json
的级别,然后运行npm install
,这将安装dependencies
所需的所有project
修改强>
package.json
interactive guide
答案 3 :(得分:0)
我发现在设置node.js项目和依赖项时,使用 Grunt [http://gruntjs.com/]有很多优点。尽管设置节点和表达项目有很多不同的方法,但使用道格拉斯·克罗克福德(Douglas Crockford)方法和“坚持下去”还有很多东西可以说。在这种情况下,Grunt是谷物,因为它正在成为设置节点项目的事实上的标准,并且存在最常见类型的node.js项目的现有模板。你可以在这里找到Grunt Express [https://github.com/blai/grunt-express]。
在这种情况下,Grunt将为您提供与其他人一致的项目结构,为节点包管理器设置依赖项文件并自动为您生成快速项目。包保存在node_modules目录中。如果您熟悉maven,您可能会认识到“约定优于配置方法”。