Reputation: 195
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
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
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
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