Github Action部署Vue项目报ESLint换行错误,本地构建正常
解决GitHub Action中Vue项目ESLint换行符跨平台错误
你遇到的问题核心是本地Windows环境的CRLF换行符与GitHub Action Ubuntu服务器的LF换行符不匹配——即使你在ESLint中指定了linebreak-style: windows,但服务器拉取的文件已经被Git自动转换为LF,导致ESLint校验失败。下面是几个针对性的解决方案:
方案一:通过Git配置统一仓库换行符
Git默认会根据操作系统自动转换换行符,这是文件在服务器上变成LF的关键。你可以在项目根目录创建.gitattributes文件,强制所有指定类型的文件使用CRLF存储和拉取:
# 强制所有文本文件使用CRLF换行符 * text eol=crlf # 若有不需要转换的二进制文件,可单独指定(示例) # *.png binary
提交这个文件到仓库后,Git会在任何环境下都保持文件的CRLF换行符,Ubuntu服务器拉取的文件就会和本地一致,ESLint不会再报错。
方案二:让ESLint根据运行环境自动适配换行符
既然本地和服务器操作系统不同,我们可以让ESLint动态切换linebreak-style规则。修改你的ESLint配置文件:
module.exports = { root: true, env: { node: true, }, extends: [ 'plugin:vue/essential', '@vue/airbnb', ], parserOptions: { parser: 'babel-eslint', }, rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'eol-last': 0, // 根据当前运行平台自动选择换行符规则 'linebreak-style': ['error', process.platform === 'win32' ? 'windows' : 'unix'], "indent": [2, 2], }, };
这样本地Windows环境会校验CRLF,Ubuntu服务器会校验LF,两边都能通过ESLint检查,同时保持各自系统的换行符习惯。
方案三:在GitHub Action中先转换换行符再执行ESLint
如果不想修改Git或ESLint配置,可以在Action的构建流程中先把文件换行符转换成CRLF,再运行lint命令:
在你的GitHub Action配置文件中添加转换步骤:
jobs: build: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Install line ending converter run: sudo apt-get install -y dos2unix - name: Convert files to CRLF run: find src -name "*.vue" -o -name "*.js" | xargs unix2dos - name: Run ESLint run: npm run lint
这个方案直接在服务器上把文件转换成ESLint要求的CRLF格式,确保校验通过。
为什么你之前的尝试没生效?
- 添加
eslintignore忽略github文件夹:问题出在src/App.vue,这个配置对目标文件无效; - 修改
npm run lint为fix:如果服务器上的文件是LF,lint --fix会把它们改成CRLF,但Git自动转换换行符导致文件一开始就是LF,没有从根源解决问题,所以还是会报错。
内容的提问来源于stack exchange,提问作者ari
相关产品推荐
相关产品推荐

