写在前面,vue项目中某个文件是utf-8(BOM)格式,导致stylelint无法正常解析文件,继而循环自动修复,导致项目run serve时循环编译。解决方法是在VSCode新建文件,内容复制到新文件再保存,用beyondCompare软件查看文件格式不再是utf-8(BOM)。
以下是我遇到问题的经过和解决过程
最近从git上拉取了我们的vue项目,run serve之后,项目编译成功后显示
App running at:
- Local: http://localhost:8080/order/
- Network: http://192.168.7.186:8080/order/
以上都是正常的,但是之后又紧接着出现Compiling...,然后编译成功,又开始Compiling...,循环起来了。
已知我们项目使用了eslint和stylelint的自动修复,怀疑是这里自动修复导致的循环编译,但是一没看到修复的文件,二是不可能一直在修复。我开始通过修改自动修复的的范围,去寻找问题。
vue.config.js相关内容如下
chainWebpack: config => {
// ESLint
config.module.rule(`eslint`).use(`eslint-loader`).options({ fix: true });
// app build 用 tsconfig.json
config.plugin(`fork-ts-checker`).tap(args => {
args[0].tsconfig = `./tsconfig.app.json`;
return args;
});
// stylelint
config
.plugin(`stylelint`)
.use(styleLintPlugin, [
{
configFile: `.stylelintrc.js`,
files: `src/**/*.{vue,scss}`,
failOnError: false,
emitErrors: true,
fix: true,
},
])
.end();
}
通过修改files的范围,最终确定了有问题的文件,因为相同项目的早期版本运行ok,所以用beyondCompare软件对比文件,没有发现文件内容的差异,但是问题文件的格式是utf-8(BOM),正常文件是utf-8。根据查看git记录,发现曾经有过一次相关修改。
但是在sourceTree中看不到这个修改的点
接下来,就是新建一下文件,内容拷贝保存,文件格式就是utf-8了,解决起来就是这么简单。
至于为什么会出现这个BOM头,网上搜索发现,在我们通常使用的windows系统中,我发现了一个有趣的现象。我新建一个空的文本文档,点击文件-另存为-编码选择UTF-8,然后保存。此时这个文件明明是空的,却占了3字节大小。原因在于:此时保存的编码方式自动会变为UTF-8 BOM。所以有可能是windows同事使用了某种编译器导致的吧。