简体   繁体   English

在 Vue-cli 项目中应用 eslint-loader 选项,以便尊重 eslint 配置

[英]Apply eslint-loader options in Vue-cli project so eslint configuration is respected

My Vue-Cli project is based on the Vuexy template (not open source).我的 Vue-Cli 项目基于 Vuexy 模板(非开源)。

The problem I'm experiencing is eslint rules that I have disabled are breaking the build.我遇到的问题是我禁用的 eslint 规则正在破坏构建。

When I first run vue-cli-service serve , it builds and runs fine.当我第一次运行vue-cli-service serve ,它构建并运行良好。 Any change to source code, however, triggers linting, and rules which should be disabled are showing up as errors:但是,对源代码的任何更改都会触发 linting,并且应该禁用的规则显示为错误:

 ERROR  Failed to compile with 1 error                                                                                                                                                                                                                                           3:57:50 pm

 error  in ./src/views/inventory/map/layers/lotsData.js

Module Error (from .../node_modules/eslint-loader/index.js):

.../frontends/backoffice/src/views/inventory/map/layers/lotsData.js
  70:40  error  'map' is defined but never used  no-unused-vars
  87:3   error  Unexpected console statement     no-console

✖ 2 problems (2 errors, 0 warnings)

The .eslintrc.js looks like this: .eslintrc.js看起来像这样:

const warnInLocal = process.env.NODE_ENV === undefined ? 0 : 'error'

module.exports = {
  root: true,
  env: {
    node: true,
    'jest/globals': true,
  },
  extends: ['plugin:vue/recommended', '@vue/airbnb'],
  parserOptions: {
    parser: 'babel-eslint',
  },
  ignorePatterns: ['**/node_modules/**', '**/.history/**'],
  rules: {
    // These make sense in deployment, but cause friction in local development
    'no-console': 0,
    'no-debugger': 0,
    'no-unused-vars': 0,
    'no-unused-expressions': 0,
  },
  plugins: ['jest'],
}

vue.config.js: vue.config.js:

//snipped
module.exports = {
  publicPath: '/',
  configureWebpack: {
    devtool: 'source-map',
    resolve: {
      alias: {
        '@themeConfig': path.resolve(__dirname, 'themeConfig.js'),
        '@core': path.resolve(__dirname, 'src/@core'),
        '@validations': path.resolve(__dirname, 'src/@core/utils/validations/validations.js'),
        '@axios': path.resolve(__dirname, 'src/libs/axios'),
      },
    },
  },
  chainWebpack: config => {
    config.module
      .rule('vue')
      .use('vue-loader')
      .loader('vue-loader')
      .tap(options => {
        // eslint-disable-next-line no-param-reassign
        options.transformAssetUrls = {
            // snipped
        }
        return options
      })
  },
  transpileDependencies: ['vue-echarts', 'resize-detector'],
}

And finally package.json:最后是 package.json:

  "devDependencies": {
    "@babel/plugin-proposal-throw-expressions": "^7.14.5",
    "@serverless-stack/cli": "0.36.0",
    "@vue/cli-plugin-babel": "~4.5.9",
    "@vue/cli-plugin-eslint": "^4.5.13",
    "@vue/cli-plugin-router": "~4.5.9",
    "@vue/cli-plugin-vuex": "~4.5.9",
    "@vue/cli-service": "~4.5.9",
    "@vue/eslint-config-airbnb": "^5.3.0",
    "@vuepress/plugin-medium-zoom": "^1.7.1",
    "babel-eslint": "^10.1.0",
    "eslint": "^7.31.0",
    "eslint-plugin-import": "^2.23.4",
    "eslint-plugin-vue": "^7.14.0",
    "sass": "1.32.*",
    "sass-loader": "^10.1.0",
    "vue-template-compiler": "2.x"
  }

There are settings given in the eslint-loader documentation but they refer to a webpack configuration file which this project doesn't have. eslint-loader 文档中给出了一些设置,但它们指的是该项目没有的 webpack 配置文件。 I think I'm somehow supposed to put them under chainWebpack but I don't really understand what that looks like.我想我应该以某种方式将它们放在chainWebpack下,但我真的不明白那是什么样子。

(I also get that eslint-loader is deprecated, but I don't think I'm in a position to replace it.) (我也知道 eslint-loader 已被弃用,但我认为我无法替换它。)

I'm really just trying to get the eslint configuration applying properly even during hot reloads, so any advice to get to that point is appreciated.我真的只是试图让 eslint 配置即使在热重载期间也能正确应用,所以任何达到这一点的建议都值得赞赏。

Adding this to to my vue.config.js seems to work:将此添加到我的 vue.config.js 似乎有效:

  chainWebpack: config => {
    // ... existing 'vue-loader' rule ...

    // stop warnings breaking the build locally
    config.module
      .rule('eslint')
      .use('eslint-loader')
      .loader('eslint-loader')
      .tap(options => ({
        ...options,
        failOnWarning: false,
        failOnError: true,
        emitWarning: true,
      }))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM