node.js如何知道express.js的位置
我的node.js服务器如何知道如何findexpress.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
查找依赖关系? 没有任何地方的path的直接枚举 – 我没有在代码中看到它。
这是一个来自scotch.io的示例项目 ,我试图分开学习。 我对MEAN堆栈相当陌生,我试图在基本层面上理解这一点。
仅供参考,这是节点v 4.5.0
这些意见已经涵盖了主要的答案,但是我会尝试在这里分解出来,稍微更全面地了解这个主题(并不是全部)。 简短版本是节点在节点核心(内置)包中查找,然后是项目的模块(包,但通常require
模块)的node_modules
path与名称匹配。 1
包安装,保存和位置
节点使用npm
来安装依赖关系,这可以是“依赖关系”或“devDependency”; 后者被用于发展关注点,而这正是通常使用模块所不需要的。 我们使用标志--save
或--save-dev
(比如npm install express --save
)将这些保存到项目的package.json
。 2
package.json
文件位于项目树的根目录(项目的文件夹/目录),并包含依赖信息以及其他信息。 3这是定义一个“包”。 当一个人向npmjs发布软件包( npmjs )的默认registry时,他们应该包含一个格式良好的package.json
,它列出了它自己的依赖关系,要包含的文件以及什么是要启动的“main”文件与,应该用在一个require
声明。
在克隆项目存储库之后,通过运行npm install
的依赖关系会将package.json
指定的package.json
安装到项目根目录中的node_modules
path中(您应该从中运行install命令)。
边注
在检查了您引用的文章列出的GitHub仓库后,您似乎已经创build了app/
目录中的每个文件。
要求-ING
在节点中使用require
语句的方式是CommonJS和节点,在node_modules/
path中首先查找(在核心软件包之后),或者如果指定文件夹或文件的相对path,则可以直接获取它。 相对path表示它以./
开头,以当前工作目录的前缀(文件正在执行), ../
为当前目录之上的目录等等。还有其他方式处理path,例如内置于节点4中的path
模块。 例如,以下内容是有效的:
-
require('./some-other.js')
需要在该文件的module.exports
,从some-other.js
文件中5 ,在当前的相对path -
require('./some.json')
会从require('./some.json')
文件中引入JSON格式的内容6 ,在当前的相对path -
require('./routes')
将/也可以从routes/
path(目录)中获取导出的内容,默认情况下该目录以index.js
开头,如果存在的话7
最后一种方法是能够引入更复杂的需求,而不是将所有内容都保存在一个过于繁忙的文件中的好方法。
我们来考虑模块的可能来源:
- 核心模块由Node.js提供
- 打包模块从做
npm install
。 这些模块存储在通常位于项目根目录下的node_modules
文件夹中。 - 您项目中任何其他位置的模块(通常由您创build的模块)
如果你需要没有任何前缀的模块,例如require('a_module')
, 首先search核心模块 ,如果找不到,接下来search软件包模块 。 在这里查看Node.js文档
如果您需要带有/
或./
前缀的模块,例如require('/another_module')
, require(./another_module)
, another_module
被认为是相对于所需文件的位置。 这就是你如何在其他地方需要模块 。
检查Node.js模块文档以供进一步阅读。