Предполагается, что существует следующая структура проекта:
public
build/ # build artifacts i. e. JS and CSS bundles generated by webpack
fonts/ # assets not affected by the build process
img/
favicon.ico
index.html # also generated by webpack
src/
package.json
webpack.config.js
...
public
- это root для моего веб-сервера, а подпапка build
- это выход для пакетов веб-пакетов. Хитрость в том, что я хочу получить index html
in public
root, который на один уровень выше с точки зрения выходной папки веб-пакета.
Теперь вот мои настройки веб-пакетов и серверов веб-пакетов в webpack.config. js:
const isDevServer = require.main.filename.includes('webpack-dev-server');
module.exports = {
...
plugins: [
new HtmlWebpackPlugin({
template: 'src/templates/index.html',
filename: isDevServer ? 'index.html' : '../index.html',
}),
...
],
output: {
path: path.resolve('./public/build'),
filename: [name].bundle.js',
publicPath: '/build/',
},
devServer: {
publicPath: '/build', // /build/ should end with a forward slash
contentBase: path.resolve('./public'),
historyApiFallback: {
index: '/build',
},
hot: true,
host: '0.0.0.0',
disableHostCheck: true,
port: 9000,
},
...
}
Несмотря на то, что для получения рабочего решения потребовалось некоторое время, эта конфигурация своего рода работает для и dev-сборок сервера и продукта. Выглядит ненадежно, хотя, в частности, часть ..index.html
в HtmlWebpackPlugin и тот факт, что { publicPath: '/build' }
в devServer
не должен иметь конечного слэла sh, который определенно пахнет и не соответствует рекомендациям в документах.
Я мог бы потенциально избавиться от подпапки build
и получить плоское учебное пособие, подобное структуре папок, содержащее все ресурсы и пакеты в одной папке, похожей на dist (в моем примере с именем public
).
Однако есть ли более стабильная конфигурация с требованием к папке /public/build
?