Webpack 将热加载程序3与Web包和生产中的

Webpack 将热加载程序3与Web包和生产中的,webpack,babeljs,webpack-dev-server,react-hot-loader,Webpack,Babeljs,Webpack Dev Server,React Hot Loader,我正在使用Webpack和React Hot Loader v3。在开发过程中,它基本上按照预期工作。但是,我希望在输出带有的静态捆绑文件时禁用热加载功能 网页包-进度-p 但我得到的是这种重复的错误 这是我的网页配置 var path = require('path'); var webpack = require('webpack'); module.exports = { devServer: { publicPath: '/js/', hot:

我正在使用Webpack和React Hot Loader v3。在开发过程中,它基本上按照预期工作。但是,我希望在输出带有的静态捆绑文件时禁用热加载功能

网页包-进度-p

但我得到的是这种重复的错误

这是我的网页配置

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

module.exports = {
    devServer: {
        publicPath: '/js/',
        hot: false,
        historyApiFallback: true,
        port: process.env.PORT || 3000
    },
    devtool: 'eval-source-map',
    entry: [
        'react-hot-loader/patch',
        'webpack-dev-server/client?http://localhost:3000',
        'webpack/hot/only-dev-server',
        './js/app/index'
    ],
    output: {
        path: path.join(__dirname, '/web/js/'),
        filename: 'bundle.js',
        publicPath: '/js/'
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin()
    ],
    module: {
        loaders: [
            {
                test: /\.css$/,
                loader: "style-loader!css-loader?modules",
            },
            {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                loader: 'babel',
                query: {
                    presets: ['es2015', 'react', 'stage-0'],
                    plugins: ['transform-flow-strip-types'],
                    cacheDirectory: true
                },
                include: path.join(__dirname, '/js/')
            }
        ]
    }
};
有人建议我尝试禁用HotModuleReplacementPlugin,但同样的错误仍然发生。关于我这里缺少的东西,你有什么想法吗?

除了去掉HotModuleReplacementPlugin外,你还需要去掉额外的入口点:

// Current
entry: [
    'react-hot-loader/patch',
    'webpack-dev-server/client?http://localhost:3000',
    'webpack/hot/only-dev-server',
    './js/app/index'
],

// Fixed
entry: [
    './js/app/index'
],
除了去掉HotModuleReplacementPlugin,您还需要去掉额外的入口点:

// Current
entry: [
    'react-hot-loader/patch',
    'webpack-dev-server/client?http://localhost:3000',
    'webpack/hot/only-dev-server',
    './js/app/index'
],

// Fixed
entry: [
    './js/app/index'
],

您需要一个单独的生产配置,在条目中不包括dev服务器或热加载程序。有关我的网页包配置的简化版本,请参见下文。如果应用程序使用类似webpack-p的东西运行,那么LAUNCH_命令是production,并使用productionConfig

但这只是一种方法。您还可以为生产使用一个单独的配置文件。类似webpack.prod.config.js的内容。然后,不用运行webpack-p,而是使用webpack-p-config webpack.prod.config.js指定生产配置。同样,您的生产配置不会在条目中包含webpack dev server或热加载程序

import webpack from 'webpack'
import path from 'path'
import HtmlWebpackPlugin from 'html-webpack-plugin'

const HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
  template: path.join(__dirname, '/app/index.html'),
  filename: 'index.html',
  inject: 'body',
})

const PATHS = {
  app: path.join(__dirname, 'app'),
  build: path.join(__dirname, 'dist'),
}

const LAUNCH_COMMAND = process.env.npm_lifecycle_event

const isProduction = LAUNCH_COMMAND === 'production'
process.env.BABEL_ENV = LAUNCH_COMMAND

const productionPlugin = new webpack.DefinePlugin({
  'process.env': {
    NODE_ENV: JSON.stringify('production'),
  },
})

const base = {
  output: {
    path: PATHS.build,
    filename: 'index_bundle.js',
  },
}

const developmentConfig = {
  entry: [
    'webpack-dev-server/client?http://localhost:8080',
    'webpack/hot/only-dev-server',
    './app/index',
  ],
}

const productionConfig = {
  entry: [
    './app/index',
  ],
}

export default Object.assign({}, base,
  isProduction === true ? productionConfig : developmentConfig)

您需要一个单独的生产配置,在条目中不包括dev服务器或热加载程序。有关我的网页包配置的简化版本,请参见下文。如果应用程序使用类似webpack-p的东西运行,那么LAUNCH_命令是production,并使用productionConfig

但这只是一种方法。您还可以为生产使用一个单独的配置文件。类似webpack.prod.config.js的内容。然后,不用运行webpack-p,而是使用webpack-p-config webpack.prod.config.js指定生产配置。同样,您的生产配置不会在条目中包含webpack dev server或热加载程序

import webpack from 'webpack'
import path from 'path'
import HtmlWebpackPlugin from 'html-webpack-plugin'

const HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
  template: path.join(__dirname, '/app/index.html'),
  filename: 'index.html',
  inject: 'body',
})

const PATHS = {
  app: path.join(__dirname, 'app'),
  build: path.join(__dirname, 'dist'),
}

const LAUNCH_COMMAND = process.env.npm_lifecycle_event

const isProduction = LAUNCH_COMMAND === 'production'
process.env.BABEL_ENV = LAUNCH_COMMAND

const productionPlugin = new webpack.DefinePlugin({
  'process.env': {
    NODE_ENV: JSON.stringify('production'),
  },
})

const base = {
  output: {
    path: PATHS.build,
    filename: 'index_bundle.js',
  },
}

const developmentConfig = {
  entry: [
    'webpack-dev-server/client?http://localhost:8080',
    'webpack/hot/only-dev-server',
    './app/index',
  ],
}

const productionConfig = {
  entry: [
    './app/index',
  ],
}

export default Object.assign({}, base,
  isProduction === true ? productionConfig : developmentConfig)