模块系统概念
在node.js中,以模块为单位划分所有功能,并且提供了完善的模块加载机制。该模块系统是基于CommonJS。
exports 使用场景:js模块文件向外暴露多个独立的函数、变量或者对象,可以使用exports,比如:
exports.msg = "msg";
module.exports 使用场景: js模块文件内容只向外暴露一个类,可以使用module.exports
module.exports = {
msg: "msg"
}
exports与module.exports 的区别:
1. module.exports初始值是一个空对象;
2. exports是module.exports的引用;
3. reuqire()返回的是module.exports
require()
通过require(arg)传入参数可以加载指定的模块。
参数类型:
一、核心模块
直接返回该模块
二、以 "./" 或者 "/" 或者 "../" 开头的文件
根据arg所在的父模块,确定arg的路径进行加载。
三、以 "./" 或者 "/" 或者 "../" 开头的目录
根据路径查找对应的文件夹,如果文件夹下存在index.js,则会默认加载该文件夹下的index.js。如果没有index.js,可以使用package.json文件,在其内添加main字段指定模块文件。如下:
{
"main":"arg.js"
}
三、不是路径
比如:
var bar = require("bar");
这种情况下,node.js会认为这是node_modules下的文件夹或者文件。**node_modules文件夹并不一定在同级目录里面,在任何直接祖先级目录中,都可以。甚至可以放到NODE_PATH环境变量**
。尝试顺序:
1、bar文件夹,策略:去父级目录下的node_modules下寻找bar文件夹,找到后去加载index.js或者package.json里mian字段指定的模块文件。如果父级的node_modules没有则去父级的父级下查找node_nodules,直到顶层父级。
2、bar.js 加载父级下node_modules下的bar.js,如果没有,查找父级的父级,直到顶层父级。
3、bar.json 加载父级下node_modules下的bar.json,如果没有,查找父级的父级,直到顶层父级。
4、bar.node加载父级下node_modules下的bar.node,如果没有,查找父级的父级,直到顶层父级。
在node.js中,以模块为单位划分所有功能,并且提供了完善的模块加载机制。该模块系统是基于CommonJS。
在node.js中,一个js文件内的函数、变量都只在该文件内有效。当外界需要引用该文件内的内容时,我们可以通过exports对象将目标暴露出去,使用者需要通过require()引用JS文件。
exports
exports导出有两种方式:exports和 module.exportsexports 使用场景:js模块文件向外暴露多个独立的函数、变量或者对象,可以使用exports,比如:
exports.msg = "msg";
module.exports 使用场景: js模块文件内容只向外暴露一个类,可以使用module.exports
module.exports = {
msg: "msg"
}
exports与module.exports 的区别:
1. module.exports初始值是一个空对象;
2. exports是module.exports的引用;
3. reuqire()返回的是module.exports
require()
通过require(arg)传入参数可以加载指定的模块。
参数类型:
一、核心模块
直接返回该模块
二、以 "./" 或者 "/" 或者 "../" 开头的文件
根据arg所在的父模块,确定arg的路径进行加载。
三、以 "./" 或者 "/" 或者 "../" 开头的目录
根据路径查找对应的文件夹,如果文件夹下存在index.js,则会默认加载该文件夹下的index.js。如果没有index.js,可以使用package.json文件,在其内添加main字段指定模块文件。如下:
{
"main":"arg.js"
}
三、不是路径
比如:
var bar = require("bar");
这种情况下,node.js会认为这是node_modules下的文件夹或者文件。**node_modules文件夹并不一定在同级目录里面,在任何直接祖先级目录中,都可以。甚至可以放到NODE_PATH环境变量**
。尝试顺序:
1、bar文件夹,策略:去父级目录下的node_modules下寻找bar文件夹,找到后去加载index.js或者package.json里mian字段指定的模块文件。如果父级的node_modules没有则去父级的父级下查找node_nodules,直到顶层父级。
2、bar.js 加载父级下node_modules下的bar.js,如果没有,查找父级的父级,直到顶层父级。
3、bar.json 加载父级下node_modules下的bar.json,如果没有,查找父级的父级,直到顶层父级。
4、bar.node加载父级下node_modules下的bar.node,如果没有,查找父级的父级,直到顶层父级。