Node.js 模块
Node.js About 2,062 words模块分类
内置模块
fs
path
http
自定义模块
创建的每个js
都是自定义模块。
第三方模块
非官方提供的模块,由第三方提供并维护,需下载使用.
又叫做包。
加载模块
使用require()
方法导入。
使用require()
方法加载其他模块时,会执行被加载模块中的代码。
加载自定义模块时,必须指定以./
或../
开头的路径标识符,如果没有指定,Node.js
会把它认为是内置模块或第三方模块。
require 自定义模块
导入自定义模块时,如果省略了文件的扩展名,则Node.js
会按以下顺序分别尝试加载文件:
- 按照确定的文件名进行加载。
- 补全**
.js
**扩展名进行加载。 - 补全**
.json
**扩展名进行加载。 - 补全**
.node
**扩展名进行加载。 - 加载四百,终端报错。
require 第三方模块
导入第三方模块时,Node.js
会从当前模块的目录开始,从node_modules
文件夹中加载第三方模块。如果没有找到第三方模块,则再从上一层目录中,进行加载,直到文件系统的根目录。
假设在C:\Users\hello\project\test.js
中调用了require('tools')
,则Node.js
会按以下顺序查找:
C:\Users\hello\project\node_modules\tools
C:\Users\hello\node_modules\tools
C:\Users\node_modules\tools
C:\node_modules\tools
- 找不到模块,报错。
目录作为模块时
当把目录作为模块标识符时(如:自定义模块"project/test.js",导入时写成require('./project')
),有三种加载方式:
- 在被加载的目录下查找一个叫做
package.json
的文件,并寻找main
属性,作为require()
加载的入口。 - 如果目录里没有
package.json
文件,或者main
入口不存在或无法解析,则Node.js
将会试图加载目录下的index.js
文件。 - 如果以上两步都失败了,则
Node.js
会在终端抛出错误信息:Error: Cannot find module 'xxx'
。
module 和 module.exports
每个自定义模块中都有一个module
实例。
declare var module: NodeModule;
// Same as module.exports
declare var exports: any;
module
对象
console.log(module)
console.log(module.exports)
输出
Module {
id: '.',
path: 'D:\\node-learn',
exports: {},
filename: 'D:\\node-learn\\06_module.js',
loaded: false,
children: [],
paths: [
'D:\\node-learn\\node_modules',
'D:\\node_modules'
]
}
注意
require()
引入模块时,得到的永远是module.exports
对象。
初始化时同时指向一块内存区域,赋值新对象就会改变指向的内存地址值。(添加新字段不会改变内存地址值的指向)
最终都以module.exports
指向的对象为准。
举例一
module.exports.username = "zs";
module.exports = {
gender: "男",
age: 18
}
输出
{ gender: '男', age: 18 }
举例二
module.exports.username = "zs";
exports = {
gender: "男",
age: 18
}
输出
{ username: 'zs' }
举例三
exports.username = "zs";
module.exports.gender = "男";
输出
{ username: 'zs', gender: '男' }
举例三
exports = {
username: "zs",
gender: "男"
}
module.exports = exports
module.exports.age = 18
输出
{ username: 'zs', gender: '男', age: 18 }
CommonJS
- 每个模块内部,
module
变量代表当前模块。 module
变量是一个对象,它的exports
属性(即module.exports
)是对外的接口。- 加载某个模块,其实就是加载该模块的
module.exports
属性。require()
方法用于加载模块。
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓