在 Node.js 模块系统中,采用CommonJS模块规范,每个文件都被视为一个独立的模块。
require
加载模块
var index = require("./src/index");
加载规则
- 优先从缓存中加载
- 核心模块
- 路径形式的模块
- 第三方模块
路径
var fooExports = require('./index') //相对路径,常用
var fooExports = require('../index') //相对路径,常用
var fooExports = require('/index') //根目录,不常用
var fooExports = require('D:/demo/index') //根目录,不常用
export
暴露模块
export 可以曝露出方法、对象、字符串等等
有exports 和 module.exports两种方式:
exports.[function name] = [function name]
moudle.exports= [function name]
ES6模块规范 使用 export 和 import 来导出、导入模块
模块在第一次加载后会被缓存。 这也意味着(类似其他缓存机制)如果每次调用 require('foo')
都解析到同一文件,则返回相同的对象。
如果按确切的文件名没有找到模块,则 Node.js 会尝试带上 .js
、 .json
或 .node
拓展名再加载。
从 node_modules 目录加载
如果传递给 require()
的模块标识符不是一个核心模块,也没有以 '/'
、 '../'
或 './'
开头,则 Node.js 会从当前模块的父目录开始,尝试从它的 /node_modules
目录里加载模块。
例子,如果在 '/home/ry/projects/foo.js'
文件里调用了 require('bar.js')
,则 Node.js 会按以下顺序查找:
/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js