node.js的模块系统

模块系统概念
在node.js中,以模块为单位划分所有功能,并且提供了完善的模块加载机制。该模块系统是基于CommonJS。

在node.js中,一个js文件内的函数、变量都只在该文件内有效。当外界需要引用该文件内的内容时,我们可以通过exports对象将目标暴露出去,使用者需要通过require()引用JS文件。

exports

exports导出有两种方式:exports和 module.exports
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,如果没有,查找父级的父级,直到顶层父级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值