我可以强制node.js要求区分大小写吗?

时间:2012-11-29 02:25:30

标签: linux node.js file-io osx-lion

由于我的Mac有一个不区分大小写的文件系统案例,因此在本地运行测试时不会捕获相关的拼写错误,但是在运行Linux的构建服务器上它们会失败。

例如:require('./mymodule')在Lion上运行时会找到./myModule.js,但在Linux上运行时却找不到。

由于我想让测试在本地失败以便不破坏服务器上的构建,我正在寻找一种方法来使node.js需要更严格,因为它会引发错误,如果它文件名不精确(即套管有差异)。

有谁知道如何实现这个目标?

修改

由于我没有找到解决这个问题的好方法,所以我创建了valiquire

此工具验证整个nodejs项目中的所有需求,同时确保外壳正确。

5 个答案:

答案 0 :(得分:3)

由于您的hfs文件系统不区分大小写,因此请查找' fileName'将匹配'文件名'在OS lib级别,因此node.js的行为相同。所以根据定义,没有解决方法。

但是以重新格式化的代价,您可以更改您的fs格式以使用hfs区分大小写。

此主题中提到了

http://www.coriolis-systems.com/iPartition.phphttps://superuser.com/questions/380330/mac-convert-from-case-sensitive-to-case-insensitive-file-system

答案 1 :(得分:3)

如果您使用网络包,请查看https://github.com/Urthen/case-sensitive-paths-webpack-plugin

刚为我们的开发版安装它。本来可以让我们免于多次采取行动......如果你在这个问题上,那可能已经发生了什么

安装

npm install --save-dev case-sensitive-paths-webpack-plugin

用法

const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');

const webpackConfig = {
    plugins: [
        new CaseSensitivePathsPlugin(),
        // other plugins ...
    ],
    // other webpack config ...
};

答案 2 :(得分:0)

在不更改操作系统文件分区的情况下,您可以使用自动检测这些更改的捆绑包,我个人使用webpack 2.它在文件解析时发出警告但情况不同。它不会阻止在OSX / Windows上编译,但你会有一个提示。另外,拥有捆绑包是现在js dev的重要资产

hacky而不推荐的方法是shim要求并强制某个案例或尽可能尝试大多数情况但这样做可能会非常难看并且在没有说出加载错误文件的潜在危险的情况下会产生糟糕的性能大小写重命名的文件和旧文件未清除

答案 3 :(得分:0)

防弹解决方案是重新格式化MacOS文件系统,使其区分大小写,但这当然非常不便。而是看一下相关问题的答案,它描述了在MacOS上针对此问题的非常优雅的解决方案,该解决方案是创建一个虚拟的区分大小写的分区,并在该分区上执行所有开发工作: How do I commit case-sensitive only filename changes in Git?

答案 4 :(得分:-6)

始终对文件名使用小写,然后您不必知道文件系统是否支持它。

让我想起人们过去常常在网址中使用空格。