vue项目循环编译

253 阅读2分钟

写在前面,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...,循环起来了。 已知我们项目使用了eslintstylelint的自动修复,怀疑是这里自动修复导致的循环编译,但是一没看到修复的文件,二是不可能一直在修复。我开始通过修改自动修复的的范围,去寻找问题。

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记录,发现曾经有过一次相关修改。

image.png

但是在sourceTree中看不到这个修改的点

image.png

接下来,就是新建一下文件,内容拷贝保存,文件格式就是utf-8了,解决起来就是这么简单。

至于为什么会出现这个BOM头,网上搜索发现,在我们通常使用的windows系统中,我发现了一个有趣的现象。我新建一个空的文本文档,点击文件-另存为-编码选择UTF-8,然后保存。此时这个文件明明是空的,却占了3字节大小。原因在于:此时保存的编码方式自动会变为UTF-8 BOM。所以有可能是windows同事使用了某种编译器导致的吧。