由于我的Mac有一个不区分大小写的文件系统,在本地运行测试时不会捕获与大小写相关的打字错误,但在运行Linux的构建服务器上会失败。
例如:require('./mymodule')
在Lion上运行时会找到./myModule.js
,但在Linux上不会。
由于我希望本地测试也失败,以便不破坏服务器上的构建,我正在寻找一种方法来使node.js要求更严格,如果文件名不准确(即大小写不同),它会抛出错误。
有谁知道有什么方法可以做到这一点吗?
- 编辑**:
由于似乎没有很好的解决方案,这个问题在那里,我创建了valiquire。
这个工具验证在整个nodejs项目中找到的所有需求,同时确保大小写正确。
7条答案
按热度按时间m0rkklqb1#
如果您使用Webpack,请查看https://github.com/Urthen/case-sensitive-paths-webpack-plugin
只是为我们的开发版本安装了它。这将使我们避免多次关闭产品...如果你在这个问题上,这可能已经发生了😉
安装
用法
lpwwtiir2#
这是一个老问题,但这是我在谷歌上看到的第一个结果。对于其他偶然发现这个问题的人来说,2021年的答案是使用ESLint包eslint-plugin-import“no-resolved”规则-https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-unresolved.md#casesensitive
默认情况下,如果所需路径的大小写不完全匹配,它会显示警告/错误。当所需路径的大小写不同时,您会看到以下内容:
要使其工作:
并添加到.eslintrc(.js或.json):
kpbwa7wx3#
因为你的hfs文件系统不区分大小写,所以在操作系统库级别查找'fileName'会匹配'filename',因此node.js的行为是一样的,所以根据定义没有解决方法。
但是以重整为代价,你可以改变你的fs格式,使用hfs区分大小写。
http://www.coriolis-systems.com/iPartition.php在此线程中提到:https://superuser.com/questions/380330/mac-convert-from-case-sensitive-to-case-insensitive-file-system
wb1gzix04#
最好的解决办法是重新格式化MacOS文件系统,使其区分大小写,但这当然是非常不方便的。请看下面这个相关问题的答案,它描述了一个非常优雅的解决方案,在MacOS上解决这个问题,即创建一个虚拟的区分大小写的分区,并在此分区上执行所有的开发工作:如何在Git中提交区分大小写的文件名更改?
nwnhqdif5#
不改变你的操作系统文件分区,你可以使用一个自动检测这些变化的捆绑包,我个人使用webpack 2。当文件被解析时,它会发出警告,但大小写不同。它不会阻止在OSX / Windows上编译,但你会得到一个提示。另外,拥有一个捆绑包是现在js dev的一个很好的资产
一种不推荐的方法是填充要求并强制使用某种大小写,或者尝试大多数可能的大小写,但这样做可能会很难看,并且会产生很差的性能,而不考虑加载错误文件的潜在危险(如果存在大小写重命名的文件并且旧文件未清除
cld4siwp6#
看起来你使用的是Javascript,但是如果你使用的是Typescript,那么有一个tsconfig.json编译器选项
"forceConsistentCasingInFileNames": "true"
可以帮助你避免在MacOS和Windows这样不区分大小写的文件系统上出现这种情况。rwqw0loc7#
总是使用小写的文件名,这样你就不必担心文件系统是否支持它。
让我想起了人们过去在url中使用空格的时候。