stylelint with gulp-stylelint - error: TypeError: Cannot read property 'warnings' of undefined in node_modules/gulp-stylelint/dist/index.js:177

stylelint with gulp-stylelint - error: TypeError: Cannot read property 'warnings' of undefined in node_modules/gulp-stylelint/dist/index.js:177

我已搜索但无法找到我的问题的答案。它说 gulp-stylelint/index.js 文件中的“警告”未定义 - 澄清一下,我没有碰过这个文件,因为它是一个“第 3 方”文件。无论是从命令行 (gulp lint:css) 还是在构建过程中 运行,我都会得到同样的错误。

错误信息如下:

[vagrant@MCOM-DEV mcom-web]$ gulp lint:css
Building Project Version: undefined
Building for Environment: production
[15:24:48] Using gulpfile ~/Projects/menards.com/mcom-web/gulpfile.js
[15:24:48] Starting 'lint:css'...
/home/vagrant/Projects/menards.com/mcom-web/node_modules/gulp-stylelint/dist/index.js:177
          var errors = res.results[0].warnings.filter(isErrorSeverity);
                                      ^

TypeError: Cannot read property 'warnings' of undefined
    at /home/vagrant/Projects/menards.com/mcom-web/node_modules/gulp-stylelint/dist/index.js:177:39
    at Array.reduce (<anonymous>)
    at /home/vagrant/Projects/menards.com/mcom-web/node_modules/gulp-stylelint/dist/index.js:176:38
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickCallback (internal/process/next_tick.js:181:9)
[vagrant@MCOM-DEV mcom-web]$

这是我在 package.json 文件中的依赖项:

      "dependencies": {
    "@babel/polyfill": "^7.0.0",
    "axios": "^0.18.0",
    "lodash": "^4.17.10",
    "popper.js": "^1.14.4",
    "uuid-js": "^0.7.5",
    "vue": "^2.5.2",
    "vuex": "^3.0.1"
  },
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/plugin-syntax-jsx": "^7.0.0",
    "@babel/plugin-transform-modules-commonjs": "^7.0.0",
    "@babel/plugin-transform-runtime": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/runtime": "^7.0.0",
    "autoprefixer": "^9.1.5",
    "babel-eslint": "^9.0.0",
    "babel-helper-vue-jsx-merge-props": "^2.0.3",
    "babel-loader": "^8.0.2",
    "babel-plugin-dynamic-import-node": "^2.1.0",
    "babel-plugin-transform-vue-jsx": "^4.0.1",
    "chalk": "^2.0.1",
    "copy-webpack-plugin": "^4.0.1",
    "cssnano": "^4.1.0",
    "eslint": "^5.6.1",
    "eslint-friendly-formatter": "^4.0.1",
    "eslint-loader": "^2.1.0",
    "eslint-plugin-vue": "^4.0.0",
    "friendly-errors-webpack-plugin": "^1.6.1",
    "gulp": "^3.9.1",
    "gulp-dart-sass": "^0.9.1",
    "gulp-eslint": "^5.0.0",
    "gulp-gzip": "^1.4.2",
    "gulp-postcss": "^8.0.0",
    "gulp-stylelint": "^7.0.0",
    "gulp-tar": "^2.1.0",
    "stylelint": "^9.6.0",
    "stylelint-config-recommended-scss": "^3.2.0",
    "stylelint-config-standard": "^18.2.0",
    "stylelint-order": "^1.0.0",
    "stylelint-scss": "^3.3.1",
    "uglifyjs-webpack-plugin": "^1.1.1",
    "vue-loader": "^15.4.1",
    "vue-template-compiler": "^2.5.2",
    "webpack": "^4.17.2",
    "yargs": "^12.0.2"
  },

这是我的 .stylelintrc 文件:

    {
  "extends": [
    "stylelint-config-standard",
    "stylelint-config-recommended-scss"
  ],
  "plugins": [
    "stylelint-order"
  ],
  "rules": {
    "at-rule-empty-line-before": null,
    "at-rule-name-space-after": "always",
    "at-rule-no-vendor-prefix": true,
    "at-rule-semicolon-space-before": "never",
    "block-closing-brace-empty-line-before": null,
    "block-closing-brace-newline-after": null,
    "block-opening-brace-space-before": null,
    "color-named": "never",
    "declaration-block-semicolon-newline-after": "always-multi-line",
    "declaration-block-semicolon-newline-before": "never-multi-line",
    "declaration-block-semicolon-space-after": "always-single-line",
    "declaration-empty-line-before": null,
    "declaration-no-important": true,
    "font-family-name-quotes": "always-where-recommended",
    "font-weight-notation": [
      "numeric",
      {
        "ignore": [
          "relative"
        ]
      }
    ],
    "function-url-no-scheme-relative": true,
    "function-url-quotes": "always",
    "length-zero-no-unit": true,
    "max-empty-lines": 2,
    "max-line-length": null,
    "media-feature-name-no-vendor-prefix": true,
    "media-feature-parentheses-space-inside": "never",
    "media-feature-range-operator-space-after": "always",
    "media-feature-range-operator-space-before": "never",
    "no-descending-specificity": null,
    "no-duplicate-selectors": true,
    "number-leading-zero": "never",
    "media-feature-name-no-unknown": [
      true,
      {
        "ignoreMediaFeatureNames": [
          "prefers-reduced-motion"
        ]
      }
    ],
    "order/properties-order": [
      "position",
      "top",
      "right",
      "bottom",
      "left",
      "z-index",
      "box-sizing",
      "display",
      "flex",
      "flex-align",
      "flex-basis",
      "flex-direction",
      "flex-wrap",
      "flex-flow",
      "flex-shrink",
      "flex-grow",
      "flex-order",
      "flex-pack",
      "align-content",
      "align-items",
      "align-self",
      "justify-content",
      "order",
      "float",
      "width",
      "min-width",
      "max-width",
      "height",
      "min-height",
      "max-height",
      "padding",
      "padding-top",
      "padding-right",
      "padding-bottom",
      "padding-left",
      "margin",
      "margin-top",
      "margin-right",
      "margin-bottom",
      "margin-left",
      "overflow",
      "overflow-x",
      "overflow-y",
      "-webkit-overflow-scrolling",
      "-ms-overflow-x",
      "-ms-overflow-y",
      "-ms-overflow-style",
      "columns",
      "column-count",
      "column-fill",
      "column-gap",
      "column-rule",
      "column-rule-width",
      "column-rule-style",
      "column-rule-color",
      "column-span",
      "column-width",
      "orphans",
      "widows",
      "clip",
      "clear",
      "font",
      "font-family",
      "font-size",
      "font-style",
      "font-weight",
      "font-variant",
      "font-size-adjust",
      "font-stretch",
      "font-effect",
      "font-emphasize",
      "font-emphasize-position",
      "font-emphasize-style",
      "font-smooth",
      "src",
      "hyphens",
      "line-height",
      "color",
      "text-align",
      "text-align-last",
      "text-emphasis",
      "text-emphasis-color",
      "text-emphasis-style",
      "text-emphasis-position",
      "text-decoration",
      "text-indent",
      "text-justify",
      "text-outline",
      "-ms-text-overflow",
      "text-overflow",
      "text-overflow-ellipsis",
      "text-overflow-mode",
      "text-shadow",
      "text-transform",
      "text-wrap",
      "-webkit-text-size-adjust",
      "-ms-text-size-adjust",
      "letter-spacing",
      "-ms-word-break",
      "word-break",
      "word-spacing",
      "-ms-word-wrap",
      "word-wrap",
      "overflow-wrap",
      "tab-size",
      "white-space",
      "vertical-align",
      "direction",
      "unicode-bidi",
      "list-style",
      "list-style-position",
      "list-style-type",
      "list-style-image",
      "pointer-events",
      "-ms-touch-action",
      "touch-action",
      "cursor",
      "visibility",
      "zoom",
      "table-layout",
      "empty-cells",
      "caption-side",
      "border-spacing",
      "border-collapse",
      "content",
      "quotes",
      "counter-reset",
      "counter-increment",
      "resize",
      "user-select",
      "nav-index",
      "nav-up",
      "nav-right",
      "nav-down",
      "nav-left",
      "background",
      "background-color",
      "background-image",
      "filter",
      "background-repeat",
      "background-attachment",
      "background-position",
      "background-position-x",
      "background-position-y",
      "background-clip",
      "background-origin",
      "background-size",
      "border",
      "border-color",
      "border-style",
      "border-width",
      "border-top",
      "border-top-color",
      "border-top-style",
      "border-top-width",
      "border-right",
      "border-right-color",
      "border-right-style",
      "border-right-width",
      "border-bottom",
      "border-bottom-color",
      "border-bottom-style",
      "border-bottom-width",
      "border-left",
      "border-left-color",
      "border-left-style",
      "border-left-width",
      "border-radius",
      "border-top-left-radius",
      "border-top-right-radius",
      "border-bottom-right-radius",
      "border-bottom-left-radius",
      "border-image",
      "border-image-source",
      "border-image-slice",
      "border-image-width",
      "border-image-outset",
      "border-image-repeat",
      "outline",
      "outline-width",
      "outline-style",
      "outline-color",
      "outline-offset",
      "box-shadow",
      "opacity",
      "-ms-interpolation-mode",
      "page-break-after",
      "page-break-before",
      "page-break-inside",
      "transition",
      "transition-delay",
      "transition-timing-function",
      "transition-duration",
      "transition-property",
      "transform",
      "transform-origin",
      "perspective",
      "appearance",
      "animation",
      "animation-name",
      "animation-duration",
      "animation-play-state",
      "animation-timing-function",
      "animation-delay",
      "animation-iteration-count",
      "animation-direction",
      "animation-fill-mode",
      "fill",
      "stroke"
    ],
    "property-no-vendor-prefix": true,
    "rule-empty-line-before": null,
    "scss/dollar-variable-default": [
      true,
      {
        "ignore": "local"
      }
    ],
    "selector-attribute-quotes": "always",
    "selector-list-comma-newline-after": "always",
    "selector-list-comma-newline-before": "never-multi-line",
    "selector-list-comma-space-after": "always-single-line",
    "selector-list-comma-space-before": "never-single-line",
    "selector-max-attribute": 2,
    "selector-max-class": 4,
    "selector-max-combinators": 4,
    "selector-max-compound-selectors": 4,
    "selector-max-empty-lines": 1,
    "selector-max-id": 0,
    "selector-max-specificity": null,
    "selector-max-type": 2,
    "selector-max-universal": 1,
    "selector-no-qualifying-type": true,
    "selector-no-vendor-prefix": true,
    "string-quotes": "double",
    "value-keyword-case": "lower",
    "value-list-comma-newline-after": "never-multi-line",
    "value-list-comma-newline-before": "never-multi-line",
    "value-list-comma-space-after": "always",
    "value-no-vendor-prefix": true
  }
}

这里是我的 gulp 文件的相关部分:

    'use strict';

const autoprefixer = require('autoprefixer');
const chalk = require('chalk');
const cssnano = require('cssnano');
const eslint = require('gulp-eslint');
const gulp = require('gulp');
const gzip = require('gulp-gzip');
const postcss = require('gulp-postcss');
const sass = require('gulp-dart-sass');
const spawn = require('child_process').spawn;
const stylelint = require('gulp-stylelint');
const tar = require('gulp-tar');
const webpack = require('webpack');

const pkg = require('./package');
const projectVersion = require('yargs').argv.projectVersion;

process.env.NODE_ENV = /.*SNAPSHOT.*/i.test(projectVersion)
  ? 'development'
  : 'production';

console.log(`Building Project Version: ${JSON.stringify(projectVersion)}`);
console.log(`Building for Environment: ${process.env.NODE_ENV}`);

// Lint CSS files
gulp.task('lint:css', () => {
  return gulp.src(`${__dirname}/src/scss/**/*.scss`)
    .pipe(stylelint({
      reporters: [
        {formatter: 'string', console: true}
      ]
    }));
});

我确定这可能是我做错了什么,但我不知道是什么?

我决定不使用 gulp-stylelint 包。我只是直接使用 webpack 和 stylelint 像这样:

'use strict';

const autoprefixer = require('autoprefixer');
const chalk = require('chalk');
const eslint = require('gulp-eslint');
const gulp = require('gulp');
const postcss = require('gulp-postcss');
const spawn = require('child_process').spawn;
const webpack = require('webpack');
const stylelint = require('stylelint');

var exec = require('child_process').exec;

// Lint CSS files
gulp.task('lint:css', (done) => {
    stylelint.lint({
      files: `${__dirname}/src/scss/**/*.scss`,
      formatter: 'string', console: true
    })
      .then(function(data) {
        if(data.output) {
          process.stdout.write(data.output.toString({ colors: true }) + '\n\n');
          console.log(chalk.red('  lint:css failed with violations.\n'));
          done();
          process.exit(1);
        }
        done();
      })
      .catch(function(err) {
        console.error(err.stack);
          done(err);
      });
});

我使用 webpack 调用 exec,然后使用示例代码从其中的 stylelint 包 node.js 示例开始。我希望这是有道理的...