linaria icon indicating copy to clipboard operation
linaria copied to clipboard

webpack config example in BUNDLERS_INTEGRATION.md is outdated in webpack in version >= 4.0.0

Open asuhacoder opened this issue 4 years ago • 0 comments

Describe the enhancement

docs/BUNDLERS_INTEGRATION.md#webpack shows an example of webpack config.

Now it says:

const webpack = require('webpack');
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

const dev = process.env.NODE_ENV !== 'production';

module.exports = {
  mode: dev ? 'development' : 'production',
  devtool: 'source-map',
  entry: {
    app: './src/index',
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/dist/',
    filename: '[name].bundle.js',
  },
  optimization: {
    noEmitOnErrors: true,
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV) },
    }),
    new MiniCssExtractPlugin({ filename: 'styles.css' }),
  ],
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: [
          { loader: 'babel-loader' },
          {
            loader: '@linaria/webpack-loader',
            options: { sourceMap: dev },
          },
        ],
      },
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
          },
          {
            loader: 'css-loader',
            options: { sourceMap: dev },
          },
        ],
      },
      {
        test: /\.(jpg|png|gif|woff|woff2|eot|ttf|svg)$/,
        use: [{ loader: 'file-loader' }],
      },
    ],
  },
  devServer: {
    contentBase: [path.join(__dirname, 'public')],
    historyApiFallback: true,
  },
};

webpack latest version is 5.68.0. In my environment v5.67.0, I get an error:

[webpack-cli] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.
 - options has an unknown property 'contentBase'. These properties are valid:
   object { allowedHosts?, bonjour?, client?, compress?, devMiddleware?, headers?, historyApiFallback?, host?, hot?, http2?, https?, ipc?, liveReload?, magicHtml?, onAfterSetupMiddleware?, onBeforeSetupMiddleware?, onListening?, open?, port?, proxy?, server?, setupExitSignals?, setupMiddlewares?, static?, watchFiles?, webSocketServer? }

There is no 'ContentBase' property. It should be 'static' property. Please refer to the official document: migration-v4.md.

Motivation

Example code should be written based on the latest version.

Possible implementations

Here is the comparison.

before

  devServer: {
    contentBase: [path.join(__dirname, 'public')],
    historyApiFallback: true,
  },

after

  devServer: {
    static: {
      directory: path.resolve(__dirname, 'static'),
    },
    historyApiFallback: true,
  },

Related Issues

Related Commit

docs: add an example webpack config

asuhacoder avatar Feb 07 '22 14:02 asuhacoder