Osama A. Abdelnasser
Osama A. Abdelnasser

Reputation: 195

Dev Server has been initialized using an options object that does not match the API schema. unknown property 'publicPath'

I am using webpack: 5.71.0 webpack-cli: 4.9.2 webpack-dev-server 4.8.1

in my webpack.config.js

const path = require('path');
const webpack = require('webpack');

module.exports = {
    entry: './src/index.js',
    mode: 'development',
    module: {
        rules: [{
                test: /\.(js|jsx)$/,
                exclude: /(node_modules)/,
                loader: 'babel-loader',
                options: { presets: ["@babel/env"] }
            },
            {
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
            }
        ]
    },
    resolve: { extensions: ['*', '.js', '.jsx'] },
    output: {
        path: path.resolve(__dirname, 'dist/'),
        publicPath: '/dist/',
        filename: './bundle.js'
    },
    devServer: {
        static: path.join(__dirname, 'public/'),
        publicPath: 'http://localhost:3000/dist/',
        port: 3000,
        hot: "only"
    },
    plugins: [new webpack.HotModuleReplacementPlugin()]
};

I got the following error [webpack-cli] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.

what is the new alternative to publicPath?

Upvotes: 13

Views: 29778

Answers (4)

Lemqa1
Lemqa1

Reputation: 21

Minimum compatible webpack-cli version is 5.0.0

Upvotes: 2

jam j
jam j

Reputation: 584

You can try this code

const path = require('path')
const htmlWebpackPlugin = require('html-webpack-plugin')
require('babel-register')

module.exports = {
    entry: ['@babel/polyfill', './src/app.js'],
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: ['babel-loader']
            }
        ]
    },
    plugins: [
        new htmlWebpackPlugin({
            template: './index.html'
        })
    ],
    mode: 'development',
    devtool: 'inline-source-map',
        devServer: {
        static: {
          directory: path.resolve(__dirname, 'public/'),
        },
        devMiddleware: {
            publicPath: '/dist/'
        },
        port: 3000,
        hot: "only"
    }
}

Upvotes: 1

Steve Jefferies
Steve Jefferies

Reputation: 619

Looks like your webpack config was written using v3 of webpack-dev-server. The schema has changed for v4 as per webpack-dev-server v4 migration guide

So your devServer block should place publicPath within the devMiddleware section, i.e.:

devServer: {
  static: path.join(__dirname, 'public/'),
  devMiddleware: {
    publicPath: '/dist/'
  },
  port: 3000,
  hot: "only"
},

Upvotes: 19

AKX
AKX

Reputation: 169338

You probably don't need to set publicPath in the devServer configuration at all; it's probably read from output.publicPath.

Try to just get rid of it and see if things still work. (They should.)

Upvotes: 1

Related Questions