node.js中的大小写敏感问题

node.js中的大小写敏感问题,node.js,Node.js,我有两个文件, extendableError.js 类ExtendableError扩展错误{ 构造函数(消息){ 超级(讯息) this.name=this.constructor.name this.message=消息 if(typeof Error.captureStackTrace==='function'){ Error.captureStackTrace(this,this.constructor) }否则{ this.stack=新错误(消息).stack } } } mod

我有两个文件, extendableError.js

类ExtendableError扩展错误{
构造函数(消息){
超级(讯息)
this.name=this.constructor.name
this.message=消息
if(typeof Error.captureStackTrace==='function'){
Error.captureStackTrace(this,this.constructor)
}否则{
this.stack=新错误(消息).stack
}
}
}

module.exports=ExtendableError
Mac基于BSD UNIX,因此文件系统区分大小写

作为旁注,通常不使用camecase作为文件名,例如:

  var extendableError = require(‘./extendable-error’)

首先,出于兼容性原因,macOS选择了不区分大小写的文件系统。但这并不意味着你必须承担责任,
磁盘实用程序
可以用来将分区重新格式化为区分大小写的模式。如果您这样做,
node.js
将向您报告错误,因为您试图
要求的模块名称错误

然后,让我们谈谈你的测试结果。关键问题是,如果稍微更改一下,您需要在
duplicatedError.js
中使用哪个

//change the required name to lowercase extendableError
const ExtendableError = require('./extendableError')

class DuplicatedError extends ExtendableError {
  constructor(message) {
    super(message)
  }
}

module.exports = DuplicatedError
测试结果将为:

false
true
您甚至可以尝试修改
duplicatedError.js
,如下所示:

//change the required name to extENDableError
const ExtendableError = require('./extENDableError')

class DuplicatedError extends ExtendableError {
  constructor(message) {
    super(message)
  }
}

module.exports = DuplicatedError
结果应为:

false
false
因此,我认为这与模块缓存无关,这里有两件事需要澄清:

  • 默认情况下,macOX是不区分大小写的文件系统
  • 即使您只有一个文件
    extendableError.js
    ,但是您
    需要两个不同名称的文件,例如:
    需要(./extendableError)
    需要(./extendableError)
    需要(./extendableError)
    ,trey将被视为三个模块

  • 我可以理解2个不同的模块,但仍然无法理解不同的运行结果。但它没有报告任何错误。如果文件名区分大小写,如果该文件不存在,它应该报告错误,而不是显示这些奇怪的结果。明白了。感谢上帝!