在需要节点模块时强制执行区分大小写的字符串匹配

Enforcing case-sensitive string match when requiring node modules

我注意到我对 heroku 的某些推送失败了,因为我的 package.json 中的依赖项与我在 javascript 中实际需要的大小写不匹配。例如,在 package.json 中,我可能有一些名为 "somepackage" 的东西,但在我的 javascript 文件中,我有 require("somePackage")。在本地,这工作正常,但在 heroku 上它失败了。是否有强制区分大小写的节点设置,以便它可以在本地对我失败?

请参阅 github https://github.com/npm/npm/issues/3914

上的讨论

npm 包的首选命名约定是 "all-lowercase"。您可能应该对代码进行必要的更改以遵循此约定。

混合大小写带来跨平台问题主要是因为 linux 有一个区分大小写的文件系统,而 windows 和 macOS 默认情况下有一个不区分大小写的文件系统。

制定 "all-lowercase" 约定是为了避免出现您所描述的情况。

如果您正在使用 Mac OS X,您可以按照 https://apple.stackexchange.com/questions/22297/is-bash-in-osx-case-insensitive

上的第一个答案检查您的文件系统是如何配置的

我写了一个 NPM 模块来执行此操作,并检查以确保代码中引用的所有依赖项都反映在 package.json 文件中:

nodejs-dep-check

https://www.npmjs.com/package/nodejs-dep-check

目的当然是为了节省您的时间,这样您就不会在没有事先 test/check 的情况下初始化构建或遇到运行时错误。