node模块化

1.暴露数据

模块暴露数据的两种方式:

  • module.exports = value
  • exports = value
    模块内部module与exports的隐式关系 exports = module.exports = {}

2.导入(引入)模块

require使用的一些注意事项

  • 对于自己创建的模块,导入时路径建议写相对路径,且不能省略./../

  • jsjson文件导入时可以不用写后缀,遇到js和json同名的文件,优先导入js文件

  • 如果导入其他类型的文件,会以js文件进行处理

  • 如果导入的路径是个文件夹,则会首先检测该文件夹下package.json 文件中的main属性对应的文件,如果main属性不存在,或者package.json不存在,则会检测文件夹下的index.jsindex.json,如果还没找到,则会报错。
    在这里插入图片描述

  • 导入node.js内置模块时,直接require模块名字即可,无需加./../

module.exports exports以及require这些都是CommonJS模块化规范中的内容,而Node.js实现了CommonJS模块化规范

3.require基本流程

  • 将相对路径转为绝对路径,定位目标文件
  • 缓存检测
  • 读取目标文件
  • 包裹为一个函数并自执行(自执行函数),通过arguments.callee.toString()查看自执行函数
  • 缓存模块的值
  • 返回module.exports的值
/* 
    以下为require执行过程的伪代码
 */
const fs = require('fs')
function require(file){
    // 将相对路径转为绝对路径
    let absolutePath = path.resolve(__dirname,file)

    // 缓存检测
    if(caches[absolutePath]){
        return caches[absolutePath]
    }

    // 读取文件的代码
    let code = fs.readFileSync(absolutePath).toString()

    // 包裹为一个函数,然后执行
    let module = {}
    let exports = module.exports = {}
    (function (exports,require,module,__filename,__dirname){
        const test = {
            age:25
        }
        module.exports = test
        // 输出
        console.log(arguments.callee.toString());
    })(exports,require,module,__filename,__dirname)

    // 缓存结果
    caches[absolutePath] = module.exports
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值