我的node.js服务器如何知道如何查找express.js文件?
在我的server.js文件中,我需要express
:
var express = require('express');
var app = express();
我的server.js文件位于app
文件夹中,而express.js位于app\node_modules\express\lib
文件夹中:
express.js位于lib
目录
node.js是否自动知道在node_modules
中查找依赖项?在任何地方都没有直接枚举路径 - 我在代码中没有看到它。
这是a sample project from scotch.io,我试图将它分开并学习。我是MEAN堆栈的新手,我试图在基本层面上理解这一点。
仅供参考,这是节点v 4.5.0
答案 0 :(得分:1)
评论已经涵盖了主要答案,但我会尝试在此处对其进行分析,以便对该主题进行更全面的概述(并非包罗万象)。简短版本是节点在节点的核心(内置)包中查找,然后是项目的node_modules
模块路径(包,但我们通常require
模块)匹配名称。 1
Node使用npm
来安装依赖项,这些依赖项可以是"依赖项"或" devDependency&#34 ;;后者用于仅仅正常使用模块所不需要的开发问题。我们使用标记package.json
或--save
(例如--save-dev
)将这些内容保存到我们的项目npm install express --save
中。 2
package.json
文件位于项目树的根目录(项目的文件夹/目录),并包含依赖项信息以及其他信息。 3这是一个"包"。当一个人向npmjs发布包时,要通过npm
安装包的(默认)注册表,它们应该包括一个格式良好的package.json
,它列出了自己的依赖项,要包含的文件,什么是"主要"如果要在require
语句中使用,则以文件开头。
在克隆项目存储库后运行npm install
时安装的依赖项,会将package.json
中指定的软件包安装到根目录中的node_modules
路径中你的项目(你应该从哪里运行安装命令)。
检查您引用的文章列出的the GitHub repo后,您似乎已在app/
目录中创建了每个文件。
在节点中使用require
语句的格式为CommonJS,对于节点,在node_modules/
路径中首先查看(在核心包之后),或者,如果指定文件夹或文件的相对路径,您可以直接获取它。路径相对意味着它以./
开头,表示当前工作目录(文件正在执行)的前缀,../
表示当前目录上方的目录,等等。还有其他处理方法路径,例如构建到节点4中的path
模块。例如,以下内容有效:
require('./some-other.js')
要求该文件的module.exports
来自some-other.js
文件5,位于当前的相对路径中require('./some.json')
将以.json
文件6引入当前相对路径中的JSON格式内容require('./routes')
将/也可以从routes/
路径(目录)引入导出的内容,默认情况下会从目录index.js
开始,如果它存在{ {3}} 最后一种方法是一种很好的方式,可以引入更复杂的需求,而不会将所有内容都保存在一个过于繁忙的文件中。
答案 1 :(得分:0)
让我们考虑模块的可能来源:
npm install
的node_modules
文件夹中,该文件夹通常位于项目的根目录中。如果您需要没有任何前缀的模块,例如require('a_module')
,则首先搜索 核心模块 ,如果找不到,则包模块<接下来搜索/ em>。 See the Node.js docs here
如果您需要前缀为/
或./
的模块,例如require('/another_module')
,require(./another_module)
,则another_module
被视为相对于需求文件的位置。这就是您在任何其他位置需要模块的方式。
检查Node.js modules docs以便进一步阅读。