[ Node ] require 的单例现象

以下内容为初步的实践,并未深入探究。可能纯在片面性。仅仅为开发过程中发现的问题,以及原因的笔记(不一定正确)。

NodeJS的模块默认情况下是单例性质的,不过其并不能保证如我们编程时设想的那样一定是单例,根据NodeJS的官方文档中描述,某个模块导入是否为单例受以下两个因素的影响:

  • Node 模块的缓存机制是大小写敏感的,譬如如果你require('/foo')require('/FOO')会返回两个不同的对象,尽管你的foo与FOO是完全相同的文件。

  • 模块是基于其被解析得到的文件名进行缓存的,鉴于不同的模块会依赖于其被调用的路径进行缓存鉴别,因此并不能保证你使用require('foo')会永远返回相同的对象,可能会根据不同的文件路径得到不同的对象。

简单实践 

写一个 test.json 文件:

{
  "text": "hello world",
  "mark": "这是一个标记"
}

在写一个 test.js 用 require 导入 test.json 文件

const first = require('./test.json')
console.log('first', first) // "{ text: 'hello world', mark: '这是一个标记' }"
delete first.text // 删除first对象中的 text 字段

const second = require('./test.json')
console.log('second', second) // "second { mark: '这是一个标记' }"

const third = require('./Test.json')
console.log('third', third) // "third { text: 'hello world', mark: '这是一个标记' }"

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值