Конфигурация для сервера webpack dev с выходной папкой dist - PullRequest
0 голосов
/ 10 апреля 2020

Предполагается, что существует следующая структура проекта:

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?

...