node.js中的区分大小写的问题
我有2个文件,extendableError.js
class ExtendableError extends Error {
constructor(message) {
super(message)
this.name = this.constructor.name
this.message = message
if (typeof Error.captureStackTrace === 'function') {
Error.captureStackTrace(this, this.constructor)
} else {
this.stack = new Error(message).stack
}
}
}
module.exports = ExtendableError
回答如下:
首先,出于兼容性原因,macOS选择了不区分大小写的文件系统。但这并不意味着您必须承担它,Disk Utility
可用于将分区重新格式化为区分大小写模式。如果你这样做,node.js
会报告错误,因为你试图require
错误的模块名称。
然后,让我们谈谈你的测试结果。关键问题是你在require
中哪一个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
,但你require
两次不同的名字,如:require(./extendableError)
,require(./ExtendableError)
,require(./extENDableError)
,trey将被视为三个模块。
与本文相关的文章
评论列表(0)
- 暂无评论