как использовать динамический импорт и точку разделения кода в веб-пакете 4 - PullRequest
0 голосов
/ 25 июня 2018

в моем проекте я использую реагирую с webpack 4 и babel.
и использую динамический импорт import() для загрузки маршрутизируемого компонента на react-router

требуемый вывод из weback:

  • vendor.bundle.js: содержит определенных основных поставщиков
    [ 'babel-polyfill', 'react', 'react-dom', 'redux', 'redux-thunk', 'moment', ]
  • main.bundle.js: пакет точки входа
  • пакеты для каждой страницы, сгенерированные из динамического импорта

моя текущая конфигурация веб-пакетов:

const webpack = require('webpack');
const rootPath = process.cwd();
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  entry: {
    vendor: [
      'babel-polyfill',
      'react',
      'react-dom',
      'redux',
      'redux-thunk',
      'moment',
    ],
    main: ['./client/src/index.jsx'],
  },
  output: {
    filename: '[name].bundle.js',
    chunkFilename: '[name].bundle.js',
    publicPath: '/',
  },
  devtool: 'source-map',

  module: {
    rules: [
      // compile js
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['react', 'es2015', 'stage-2'],
            plugins: ['react-hot-loader/babel'],
            babelrc: false,
          },
        },
      },
      // compile sass
      {
        test: /\.scss$/,
        use: ['style-loader', 'css-loader', 'resolve-url-loader', 'sass-loader?sourceMap'],
      }, 
      {
        test: require.resolve('blueimp-file-upload'),
        loader: 'imports-loader?define=>false',
      },
    ],
  },

  resolve: {
    extensions: ['.js', '.jsx'],
  },

  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new HtmlWebpackPlugin({
      inject: true,
      template: `${rootPath}/client/index.html`,
    }),
    new webpack.ProvidePlugin({
      jQuery: 'jquery',
      $: 'jquery',
      jquery: 'jquery',
    }),
  ],
  devServer: {
    hot: true,
    inline: true,
    contentBase: './client',
    port: 6000,
    host: '0.0.0.0',
    historyApiFallback: true,
    disableHostCheck: true,
  },
};

, но эта продукция:
* main.bundle.js включает в себя реакцию всех поставщиков, реагирование и т. Д. ...
* и vendor.bundle.js также содержат информацию о поставщиках реагирует, реагирует и т. Д. ...
* home.bundle.js и другие страницы, а также автоматически генерируемые поставщики vendors~Article~NewArticle.bundle.js, vendors~Profile/index.bundle.js

как избежать дублирования кода?

...