WebpackOptionsValidationError: недопустимый объект конфигурации в Storybook - PullRequest
0 голосов
/ 09 июля 2019

Получение ошибки конфигурации с моей конфигурацией веб-пакета Storybook.

WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.
ERR!  - configuration.module.rules[0].include should be one of these:
ERR!    RegExp | string | function | [(recursive)] | object { and?, exclude?, include?, not?, or?, test? } | [RegExp | string | function | [(recursive)] | object { and?, exclude?, include?, not?, or?, test? }]

Кажется, у меня проблема с набором правил веб-пакетов, в которые я пытаюсь импортировать. Эта работа в другой моей сборке, но по какой-то причине здесь не работает?!

Я попытался изменить версии webpack / storybook на несколько более старые и убедиться, что пакеты NPM соответствуют моей предыдущей сборке.

webpack.config.js (в папке .storybook)

const { resolve } = require('path');

module.exports = (baseConfig, env, defaultConfig) => {
    const rulesFn = require('../.webpack/rules.js').rules;
    const rules = rulesFn(
        {
            outputLegacy: '',
            generated: '',
            output: '',
            src: '',
        },
        input => input['development'],
        input => input['modern'],
    );
    delete rules[1].include;
    defaultConfig.module.rules = rules;
    defaultConfig.resolve.extensions = ['.ts', '.tsx', '.js'];

    return defaultConfig;
};

rules.js в папке .webpack

const { configureBabel } = require('../_babel.config');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const path = require('path');

/**
 * @param themePaths {ThemePaths}
 * @param selectMode {SelectMode}
 * @param selectTarget {SelectTarget}
 * @returns {*[]}
 */
function rules(themePaths, selectMode, selectTarget) {
    const babelOptions = configureBabel(selectMode, selectTarget);
    const babelEnvDeps = require('webpack-babel-env-deps');
    return [
        {
            include: [
                path.resolve(__dirname, '..', 'server'),
                path.resolve(__dirname, '..', 'runtime'),
                themePaths.src,
                themePaths.generated,
                path.resolve(__dirname, '..', 'node_modules', 'debug'),
                babelEnvDeps.include(),
            ],
            // exclude: [/node_modules/],
            test: /\.(ts|tsx|mjs|js|svg|graphql)$/,
            use: [
                {
                    loader: 'babel-loader',
                    options: babelOptions,
                },
            ],
        },
        {
            test: [/\.scss$/],
            use: [
                selectMode({ development: 'style-loader' }),
                selectMode({ production: MiniCssExtractPlugin.loader }),
                {
                    loader: 'css-loader',
                    options: {
                        importLoaders: 1,
                        localIdentName: '[name]-[local]-[hash:base64:3]',
                        modules: false,
                    },
                },
                {
                    loader: 'sass-loader',
                    options: {
                        data: `
                        @import "_vars";
                        @import "_mixins";
                        @import "_normalize";
                        @import "_reset";
                        `,
                        includePaths: ['src/scss'],
                    },
                },
                {
                    loader: 'postcss-loader',
                    options: {
                        ident: 'postcss',
                        plugins: [require('autoprefixer')()],
                    },
                },
                'resolve-url-loader',
            ].filter(Boolean),
        },
        {
            test: /\.(jpe?g|png|svg|gif)$/,
            use: [
                {
                    loader: 'file-loader',
                    options: {},
                },
            ],
        },
        {
            test: /\.(woff2?)$/,
            use: [
                {
                    loader: 'file-loader',
                    options: {
                        name: '[path][name].[ext]',
                    },
                },
            ],
        },
    ];
}

module.exports.rules = rules;

package.json в корне

{
  "name": "eat",
  "version": "1.0.0",
  "description": "Killer Storybook Config",
  "scripts": {
    "start": "HTTPS=true webpack-dev-server --mode development --open --hot",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "storybook": "start-storybook -p 9001 -c .storybook",
    "precommit": "lint-staged",
    "eslint:global": "eslint src -c src/.eslintrc.js --ext .js,.jsx,.tsx,.ts",
    "eslint:global:fix": "eslint --fix src -c src/.eslintrc.js --ext .js,.jsx,.tsx,.ts"
  },
  "lint-staged": {
    "src/**/*.{js,jsx,tsx,json,css}": [
      "prettier --write",
      "git add"
    ]
  },
  "keywords": [
    "Storybook",
    "Webpack",
    "React",
    "Typescript"
  ],
  "author": "Harry Ghazni",
  "license": "ISC",
  "dependencies": {
    "@babel/cli": "^7.2.3",
    "@types/jest": "24.0.0",
    "@types/node": "10.12.24",
    "@types/react": "^16.8.14",
    "@types/react-dom": "^16.8.0",
    "@types/react-router-dom": "^4.3.1",
    "babel-preset-env": "^1.7.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "body-parser": "^1.18.3",
    "classnames": "^2.2.6",
    "concurrently": "^4.1.0",
    "cors": "^2.8.5",
    "mongoose": "^5.4.9",
    "nodemon": "1.18.9",
    "open": "^6.2.0",
    "open-cli": "^1.0.5",
    "postcss-sass-loader": "^1.1.0",
    "postcss-scss": "^2.0.0",
    "react": "^16.8.1",
    "react-dom": "^16.8.1",
    "react-modal": "^3.8.1",
    "react-router": "^4.3.1",
    "react-scripts": "2.1.3",
    "react-transition-group": "^4.0.1",
    "resolve-url-loader": "^3.1.0",
    "st": "^1.2.2",
    "webpack-babel-env-deps": "^1.5.0"
  },
  "devDependencies": {
    "@babel/core": "^7.2.2",
    "@babel/node": "^7.2.2",
    "@babel/plugin-proposal-class-properties": "^7.4.4",
    "@babel/preset-env": "^7.3.1",
    "@babel/preset-react": "^7.0.0",
    "@csstools/postcss-sass": "^4.0.0",
    "@storybook/addon-knobs": "4.0.4",
    "@storybook/react": "^4.0.7",
    "@types/storybook__addon-knobs": "5.0.1",
    "@types/storybook__react": "^4.0.2",
    "@types/webpack-env": "^1.13.9",
    "@typescript-eslint/eslint-plugin": "^1.11.0",
    "@typescript-eslint/parser": "^1.11.0",
    "awesome-typescript-loader": "^5.2.1",
    "babel-loader": "8.0.4",
    "connect": "^3.6.6",
    "crossbow": "^4.3.3",
    "css-loader": "^2.1.0",
    "eslint": "^6.0.1",
    "express": "^4.16.4",
    "file-loader": "^3.0.1",
    "fs": "0.0.1-security",
    "html-webpack-plugin": "^3.2.0",
    "https": "^1.0.0",
    "lint-staged": "^8.2.1",
    "mini-css-extract-plugin": "^0.7.0",
    "node-sass": "4.11.0",
    "postcss-loader": "^3.0.0",
    "react-router-dom": "^4.3.1",
    "sass-loader": "7.1.0",
    "style-loader": "^0.23.1",
    "typescript": "^3.3.3",
    "webpack": "^4.28.4",
    "webpack-cli": "3.3.1",
    "webpack-dev-server": "3.3.1"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ],
  "main": "index.js",
  "repository": "git@github.com:hghazni/killer-storybook-config.git"
}

Я хочу избавиться от этой ошибки и запуститьсборник рассказов, способный использовать глобальные переменные scss.Надеюсь, кто-нибудь увидит, что мне не хватает!

...