您的位置:首页 > Web前端 > Node.js

nodejs中的模块

2016-06-12 12:00 274 查看


核心模块#

显示原文
其他翻译
纠错

Node中有一些模块是编译成二进制的。这些模块在本文档的其他地方有更详细的描述。

显示原文
其他翻译
纠错

核心模块定义在node源代码的
lib/
目录下。

显示原文
其他翻译
纠错

require()
总是会优先加载核心模块。例如,
require('http')
总是返回编译好的HTTP模块,而不管是否有这个名字的文件。

显示原文
其他翻译
纠错


文件模块#

显示原文
其他翻译
纠错

如果按文件名没有查找到,那么node会添加 
.js
和 
.json
后缀名,再尝试加载,如果还是没有找到,最后会加上
.node
的后缀名再次尝试加载。

显示原文
其他翻译
纠错

.js
 会被解析为Javascript纯文本文件,
.json
 会被解析为JSON格式的纯文本文件. 
.node
 则会被解析为编译后的插件模块,由
dlopen
进行加载。

显示原文
其他翻译
纠错

模块以
'/'
为前缀,则表示绝对路径。例如,
require('/home/marco/foo.js')
 ,加载的是
/home/marco/foo.js
这个文件。

显示原文
其他翻译
纠错

模块以
'./'
为前缀,则路径是相对于调用
require()
的文件。
也就是说,
circle.js
必须和
foo.js
在同一目录下,
require('./circle')
才能找到。

显示原文
其他翻译
纠错

当没有以'/'或者'./'来指向一个文件时,这个模块要么是"核心模块",要么就是从
node_modules
文件夹加载的。

显示原文
其他翻译
纠错

如果指定的路径不存在,
require()
会抛出一个
code
属性为
'MODULE_NOT_FOUND'
的错误。

显示原文
其他翻译
纠错


node_modules
文件夹中加载#

显示原文
其他翻译
纠错

如果
require()
中的模块名不是一个本地模块,也没有以
'/'
'../'
,
或是 
'./'
开头,那么node会从当前模块的父目录开始,尝试在它的
/node_modules
文件夹里加载相应模块。

显示原文
其他翻译
纠错

如果没有找到,那么就再向上移动到父目录,直到到达顶层目录位置。

显示原文
其他翻译
纠错

例如,如果位于
'/home/ry/projects/foo.js'
的文件调用了
require('bar.js')
,那么node查找的位置依次为:

显示原文
其他翻译
纠错

/home/ry/projects/node_modules/bar.js


/home/ry/node_modules/bar.js


/home/node_modules/bar.js


/node_modules/bar.js


显示原文
其他翻译
纠错

这就要求程序员应尽量把依赖放在就近的位置,以防崩溃。

显示原文
其他翻译
纠错


Folders as Modules#

显示原文
其他翻译
纠错

可以把程序和库放到一个单独的文件夹里,并提供单一入口来指向它。有三种方法,使一个文件夹可以作为
require()
的参数来加载。

显示原文
其他翻译
纠错

首先是在文件夹的根目录创建一个叫做
package.json
的文件,它需要指定一个
main
模块。下面是一个package.json文件的示例。

显示原文
其他翻译
纠错
{ "name" : "some-library",
"main" : "./lib/some-library.js" }


显示原文
其他翻译
纠错

示例中这个文件,如果是放在
./some-library
目录下面,那么
require('./some-library')
就将会去加载
./some-library/lib/some-library.js


显示原文
其他翻译
纠错

This is the extent of Node's awareness of package.json files.

显示原文
其他翻译
纠错

如果目录里没有package.json这个文件,那么node就会尝试去加载这个路径下的
index.js
或者
index.node
。例如,若上面例子中,没有package.json,那么
require('./some-library')
就将尝试加载下面的文件:

显示原文
其他翻译
纠错

./some-library/index.js


./some-library/index.node


显示原文
其他翻译
纠错


Caching

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: