29

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

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

由于我想让测试在本地也失败,以免破坏服务器上的构建,所以我正在寻找一种方法使 node.js 要求更严格,因为如果文件名是,它会引发错误不准确(即大小写不同)。

有谁知道实现这一目标的方法?

编辑

由于这个问题似乎没有很好的解决方案,我创建了valiquire

该工具验证整个 nodejs 项目中的所有要求,同时确保大小写正确。

4

6 回答 6

7

如果您使用 webpack,请查看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 ...
};
于 2017-10-23T13:11:07.543 回答
2

由于您的 hfs 文件系统不区分大小写,“fileName”的查找将在 OS lib 级别匹配“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 -系统

于 2014-09-09T15:33:28.330 回答
2

This is an old question but it was the first google result I came across. For anyone else who stumbles across this, the 2021 answer is to use ESLint package eslint-plugin-import "no-unresolved" rule - https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-unresolved.md#casesensitive

By default, it will show a warning/error if a require path case does not match exactly. When the require path has a difference in case, you will see this:

/Users/<your user>/projects/my-app/api/v1/createApplication.js:
    Line 7: import/no-unresolved - Casing of ../../../repositories/Application does not match the underlying filesystem.

To get this working:

npm install --save-dev eslint-plugin-import

And add to .eslintrc(.js or .json):

    "extends": [
        ...
        "plugin:import/recommended",
        ...
    ],
    ...
    "rules": {
        "import/no-unresolved": [2, {commonjs: true, amd: true}],
        ...
于 2021-10-30T01:36:16.583 回答
1

万无一失的答案是将您的 MacOS 文件系统重新格式化为区分大小写,但这当然非常不方便。相反,看看这个对相关问题的回答,它描述了在 MacOS 上针对这个问题的一个非常优雅的解决方案,即创建一个虚拟区分大小写的分区,并执行所有开发工作: How do I commit case-sensitive only Git中的文件名更改?

于 2018-09-25T00:02:18.093 回答
0

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

hacky且不推荐的方法是填充要求并强制某个案例或尝试大多数可能的案例,但这可能会非常难看并且会产生较差的性能,而不会提及如果有案例加载错误文件的潜在危险 -重命名文件并且旧文件未清理

于 2017-04-24T19:29:14.527 回答
-6

总是使用小写的文件名,那么你就不必担心文件系统是否支持它。

让我想起人们过去在 url 中使用空格的时候。

于 2012-11-29T03:41:12.517 回答