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

webghufk  于 2022-12-22  发布在  Linux
关注(0)|答案(7)|浏览(201)

由于我的Mac有一个不区分大小写的文件系统,在本地运行测试时不会捕获与大小写相关的打字错误,但在运行Linux的构建服务器上会失败。
例如:require('./mymodule')在Lion上运行时会找到./myModule.js,但在Linux上不会。
由于我希望本地测试也失败,以便不破坏服务器上的构建,我正在寻找一种方法来使node.js要求更严格,如果文件名不准确(即大小写不同),它会抛出错误。
有谁知道有什么方法可以做到这一点吗?

    • 编辑**:

由于似乎没有很好的解决方案,这个问题在那里,我创建了valiquire
这个工具验证在整个nodejs项目中找到的所有需求,同时确保大小写正确。

m0rkklqb

m0rkklqb1#

如果您使用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 ...
};
lpwwtiir

lpwwtiir2#

这是一个老问题,但这是我在谷歌上看到的第一个结果。对于其他偶然发现这个问题的人来说,2021年的答案是使用ESLint包eslint-plugin-import“no-resolved”规则-https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-unresolved.md#casesensitive
默认情况下,如果所需路径的大小写不完全匹配,它会显示警告/错误。当所需路径的大小写不同时,您会看到以下内容:

/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.

要使其工作:

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

并添加到.eslintrc(.js或.json):

"extends": [
        ...
        "plugin:import/recommended",
        ...
    ],
    ...
    "rules": {
        "import/no-unresolved": [2, {commonjs: true, amd: true}],
        ...
kpbwa7wx

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

wb1gzix0

wb1gzix04#

最好的解决办法是重新格式化MacOS文件系统,使其区分大小写,但这当然是非常不方便的。请看下面这个相关问题的答案,它描述了一个非常优雅的解决方案,在MacOS上解决这个问题,即创建一个虚拟的区分大小写的分区,并在此分区上执行所有的开发工作:如何在Git中提交区分大小写的文件名更改?

nwnhqdif

nwnhqdif5#

不改变你的操作系统文件分区,你可以使用一个自动检测这些变化的捆绑包,我个人使用webpack 2。当文件被解析时,它会发出警告,但大小写不同。它不会阻止在OSX / Windows上编译,但你会得到一个提示。另外,拥有一个捆绑包是现在js dev的一个很好的资产
一种不推荐的方法是填充要求并强制使用某种大小写,或者尝试大多数可能的大小写,但这样做可能会很难看,并且会产生很差的性能,而不考虑加载错误文件的潜在危险(如果存在大小写重命名的文件并且旧文件未清除

cld4siwp

cld4siwp6#

看起来你使用的是Javascript,但是如果你使用的是Typescript,那么有一个tsconfig.json编译器选项"forceConsistentCasingInFileNames": "true"可以帮助你避免在MacOS和Windows这样不区分大小写的文件系统上出现这种情况。

rwqw0loc

rwqw0loc7#

总是使用小写的文件名,这样你就不必担心文件系统是否支持它。
让我想起了人们过去在url中使用空格的时候。

相关问题