如何解决Linux与Windows下 换行符差异导致资源文件不一致问题
问题核心原因
Linux系统默认使用LF(\n)作为换行符,Windows默认使用CRLF(\r\n)作为换行符,你用到的minify工具默认会适配当前运行系统的换行符规则,所以才会出现输出内容自动新增换行、和历史版本不一致的问题。
可用解决方案
- 强制配置minify工具的换行符规则
绝大多数主流minify工具(如terser、uglify-js、cssnano等)都支持手动指定换行符类型,你可以直接强制设置为LF匹配原有Linux环境的输出规则。例如使用terser时可以加运行参数--newline LF,或者在工具配置文件中新增配置项newline: "lf",这样不管在什么系统下执行命令,输出的换行符都会保持统一。 - 配置项目级Git换行符规则
如果你的项目用Git做版本管理,可以在项目根目录新增.gitattributes文件,指定需要minify的资源文件的换行符规则,示例配置如下:
配置后Git会自动统一所有环境下该类型文件的换行符为LF,避免Windows环境拉取代码时自动转成CRLF导致minify识别异常。*.js text eol=lf *.css text eol=lf - 临时指定执行环境的换行符规则
如果使用Node.js生态的minify工具,可以在执行命令前临时设置环境变量强制用LF换行:- CMD环境执行:
set NODE_NEWLINE=lf - PowerShell环境执行:
$env:NODE_NEWLINE="lf"
执行完上述命令后再跑你的minify命令即可输出符合要求的内容。
- CMD环境执行:
- 后处理修正输出文件
如果不方便修改minify工具配置,可以在minify命令执行完成后新增一步换行符替换操作,直接把输出文件的CRLF替换为LF,PowerShell示例命令如下:(Get-Content 你的输出文件路径 -Raw) -replace "`r`n", "`n" | Set-Content 你的输出文件路径 -NoNewline
内容的提问来源于stack exchange,提问作者masoud
相关产品推荐
相关产品推荐

