Сбой экспорта конфигурации веб-пакета как функции - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь обработать переменные разработки и выпуска в конфигурации моего веб-пакета (см. https://webpack.js.org/guides/production/),, но он не работает с

WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.
 - configuration should be an object.

package.json

        {
          "scripts": {
            "test": "echo \"Error: no test specified\" && exit 1",
            "build": "./node_modules/.bin/webpack",
            "start": "npm run build && node server.js"
          },
          "devDependencies": {
             //...
             "webpack": "^4.20.2",
             "webpack-cli": "^3.1.2",
             "webpack-dev-middleware": "^3.4.0",
             "webpack-hot-middleware": "^2.24.2"
          }
       }

webpack.config.js

const path = require('path'),
    webpack = require('webpack'),
    HtmlWebpackPlugin = require('html-webpack-plugin');

let config = {
    entry: {
        app: [
            './src/app/App.tsx', 'webpack-hot-middleware/client'
        ],
        vendor: ['react', 'react-dom']
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'js/[name].bundle.js'
    },
    // ...
}

Этот экспорт работает, как и ожидалось, без ошибок и предупреждений

module.exports = config; // everything is fine

Но это не удается

module.exports = function(env, argv) { // this errors

    return config;
};

Существует аналогия, но оставленный без ответа вопрос здесь: Базовая конфигурация webpack как функция не работает

Это очень загадочное поведение, спасибо, если кто-нибудь может помочь!

1 Ответ

0 голосов
/ 02 октября 2018

Ну, это работает.Я не заметил, что ошибка происходит в совершенно другом месте моего кода.Я делал урок о HMR с веб-пакетом и экспрессом.Эта строка кода в экспресс-настройке вызывает проблему:

server.js

const webpackConfig = require('./webpack.config');
const compiler = webpack(webpackConfig);
//...
app.use(
    require('webpack-dev-middleware')(compiler, {
        noInfo: true,
        publicPath: webpackConfig.output.publicPath
    })
);

WebpackConfig только получает функцию без вызова и поэтому не возвращает объект,Таким образом, добавление скобок - это все, что нужно, чтобы заставить его работать.

const webpackConfig = require('./webpack.config')();
//..
...