Prettier on git commit hook 显示代码风格问题,但只有 CRLF 差异
Prettier on git commit hook shows code style issues, but only CRLF differences
我在我的 TypeScript 项目中使用 Prettier。我在 Visual Studio 代码中保存时格式化所有文件。
我还配置了一个 pre-commit git hook with Husky 来检查所有文件的格式。
这就是我的 pre-commit
挂钩文件的样子:
#!/bin/sh
. "$(dirname "[=11=]")/_/husky.sh"
cd ./MyApp/ClientApp
npx prettier --check .
有趣的部分来了。我使用 VS Code 处理 MyApp/ClientApp
目录中的文件,它会在保存时完成所有格式设置。到目前为止一切顺利。
但是,当我尝试进行提交时,Prettier 预提交挂钩被执行并且我收到以下错误:
git commit
Checking formatting...
[warn] src\dataTypes\numeratorObjectType.ts
[warn] src\viewModels\numeratorViewModel.ts
[warn] Code style issues found in the above file(s). Forgot to run Prettier?
husky - pre-commit hook exited with code 1 (error)
如果我在 VS Code 中打开这些文件并保存它们,则没有任何反应,因为它们已经被格式化。
所以我通过 运行 在 MyApp/ClientApp
目录中执行以下命令手动执行 Prettier:
npx prettier --write .
此命令输出所有文件,其中两个有问题的文件显然已重新格式化:
我还看到这些文件在 git 中发生了更改。但是,git diff
什么也没显示。当我执行 git add .
时,我收到以下警告:
The file will have its original line endings in your working directory. warning: LF will be replaced by CRLF
这意味着这些文件只有行尾有问题。
根据 this thread,我在我的 git 存储库中设置了以下配置参数:
git config core.autocrlf true
git config core.safecrlf false
似乎在执行git add
时,CRLF 的警告消失了,但它仍然没有解决 Prettier 的问题。它仍然显示代码风格问题,即使文件中没有真正的 differences/styling 问题。
我在 Windows,我想这可能很重要。
知道这里有什么问题吗?目前,在预提交挂钩上检查 Prettier 格式没有任何意义。
在进一步挖掘问题并感谢 @eDonkey 和 @torek 的评论后,我找到了解决方案。我测试了 2 天,似乎有效。
请注意,此解决方案可能适用于只有 Windows 开发人员的项目。如果你们所有人都在 Mac/Linux,您可能希望使用 LF 而不是 CRLF。如果团队混杂,我不确定这里有没有完美的解决方案。
首先,配置git
不做CRLF -> LF转换:
git config core.autocrlf false
接下来,配置 Prettier 使用 CRLF 作为行尾字符。您可以通过将以下设置添加到 Prettier's config file:
来实现
"endOfLine": "crlf"
如果您的某些文件已经有 LF 行结尾,您可能需要将它们转换为 CRLF。为此使用 npx prettier --write .
就足够了。
我唯一注意到的是 git
现在在每行末尾添加 ^M
个字符:
但这对我来说不是问题。
我在我的 TypeScript 项目中使用 Prettier。我在 Visual Studio 代码中保存时格式化所有文件。 我还配置了一个 pre-commit git hook with Husky 来检查所有文件的格式。
这就是我的 pre-commit
挂钩文件的样子:
#!/bin/sh
. "$(dirname "[=11=]")/_/husky.sh"
cd ./MyApp/ClientApp
npx prettier --check .
有趣的部分来了。我使用 VS Code 处理 MyApp/ClientApp
目录中的文件,它会在保存时完成所有格式设置。到目前为止一切顺利。
但是,当我尝试进行提交时,Prettier 预提交挂钩被执行并且我收到以下错误:
git commit
Checking formatting...
[warn] src\dataTypes\numeratorObjectType.ts
[warn] src\viewModels\numeratorViewModel.ts
[warn] Code style issues found in the above file(s). Forgot to run Prettier?
husky - pre-commit hook exited with code 1 (error)
如果我在 VS Code 中打开这些文件并保存它们,则没有任何反应,因为它们已经被格式化。
所以我通过 运行 在 MyApp/ClientApp
目录中执行以下命令手动执行 Prettier:
npx prettier --write .
此命令输出所有文件,其中两个有问题的文件显然已重新格式化:
我还看到这些文件在 git 中发生了更改。但是,git diff
什么也没显示。当我执行 git add .
时,我收到以下警告:
The file will have its original line endings in your working directory. warning: LF will be replaced by CRLF
这意味着这些文件只有行尾有问题。 根据 this thread,我在我的 git 存储库中设置了以下配置参数:
git config core.autocrlf true
git config core.safecrlf false
似乎在执行git add
时,CRLF 的警告消失了,但它仍然没有解决 Prettier 的问题。它仍然显示代码风格问题,即使文件中没有真正的 differences/styling 问题。
我在 Windows,我想这可能很重要。
知道这里有什么问题吗?目前,在预提交挂钩上检查 Prettier 格式没有任何意义。
在进一步挖掘问题并感谢 @eDonkey 和 @torek 的评论后,我找到了解决方案。我测试了 2 天,似乎有效。
请注意,此解决方案可能适用于只有 Windows 开发人员的项目。如果你们所有人都在 Mac/Linux,您可能希望使用 LF 而不是 CRLF。如果团队混杂,我不确定这里有没有完美的解决方案。
首先,配置git
不做CRLF -> LF转换:
git config core.autocrlf false
接下来,配置 Prettier 使用 CRLF 作为行尾字符。您可以通过将以下设置添加到 Prettier's config file:
来实现"endOfLine": "crlf"
如果您的某些文件已经有 LF 行结尾,您可能需要将它们转换为 CRLF。为此使用 npx prettier --write .
就足够了。
我唯一注意到的是 git
现在在每行末尾添加 ^M
个字符:
但这对我来说不是问题。