eslint上动态更改文件列表

橙子

我只想eslint在修改过的文件上运行我创建了一个新的运行目标package.json,以运行eslint命令行(git diff --name-only --relative | grep -E '.*\\.(vue|js)$' | xargs eslint --ext .js,.vue)。从理论上讲,这应该可以正常工作,但是当使用webpack将文件捆绑在一起时,在我的项目中会发生一些转换步骤(字符串替换)eslint(某些非标准标记将扩展为JS)。

我有什么选择,我将如何实施它们?例如,我可以执行特定的webpack规则/加载程序并将结果通过管道传递给eslint吗?我看到的另一个选择是将其包含eslint在webpack规则/加载器过程中(而不是从命令行执行),但是我将如何对当前已修改的文件进行过滤(可以由包含git diff...结果的临时文件处理)?)

橙子

我有一种可行的方法。我选择修改webpack.base.conf.js而不是使用命令行解决方案来利用已经存在的字符串替换加载程序。

将在WebpackBeforeBuildPlugin回调函数中收集文件,而不是使用基于正则表达式的测试变量,而是使用一个函数来检查先前收集的文件。

const exec = require('child_process').exec;
const WebpackBeforeBuildPlugin = require('before-build-webpack');
var modFilesList = new Set([]);
const srcPath = resolve('.');

...
      rules: [{
        test: function(filename) {
          let relFilename = path.relative(srcPath, filename);
          let lint = modFilesList.has(relFilename);
          return lint
        },
        loader: 'eslint-loader',
        include: resolve('src'),
        exclude: /node_modules/,
        options: {
          formatter: require('eslint-friendly-formatter'),
          cache: false
        }
      }, {
       ... other string replacement loader ...
      }


   plugins: [
    ...
    new WebpackBeforeBuildPlugin(function(stats, callback) {
      // Collect changed files before building.
      let gitCmd = 'git diff --name-only --relative | grep -E ".*\\.(vue|js)$"';
      const proc = exec(gitCmd, (error, stdout, stderr) => {
        if (stdout) {
          let files = stdout.split('\n');
          modFilesList = new Set(files);
        }
        if (error !== null) {
          console.log(`exec error: ${error}`);
        }
      });
      callback();
    })
  ]

目前唯一的问题是,当git文件发生更改时,它们不会基于这些文件更改(即,新文件已更改,或者之前(在启动webpack-dev-server之前)已更改的文件更改)触发重新lint丢弃)。我检查了一切。更改被注册并存储在中modFilesList,执行测试功能并返回true(对于以前未更改的文件中的新更改),或者在放弃更改的情况下返回false。我也cache选择了无济于事。似乎在初始加载时,eslint-loader它会缓存将来将处理的文件(不知道这是使用测试功能而不是正则表达式还是正则表达式的结果)。是否有人有想法或曾经见过这个想法(eslint-loader未更新文件列表)?

更新资料

这似乎是webpack(或其他加载程序之一)的问题,因为文件更改时eslint-loader甚至没有执行。test但是执行函数有点奇怪。我不完全了解装载机的工作方式或它们如何共同发挥作用,因此可能有其他装载机导致了这一情况...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章