node.js中的大小写敏感问题
我有两个文件, extendableError.jsnode.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扩展错误{
构造函数(消息){
超级(讯息)
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个不同的模块,但仍然无法理解不同的运行结果。但它没有报告任何错误。如果文件名区分大小写,如果该文件不存在,它应该报告错误,而不是显示这些奇怪的结果。明白了。感谢上帝!