module.exports = (env, config) => {
  const isEnvDevelopment = env === 'development'
  const {
    port,
    publicPath,
    srcPath,
    distPath,
    appJs,
    appHtml,
    defineEnv,
  } = config

  return {
    mode: isEnvDevelopment ? 'development' : 'production',
    entry: require('./entry')(isEnvDevelopment, appJs),
    output: require('./output')(isEnvDevelopment, distPath, publicPath),
    module: {
      rules: require('./rules')(isEnvDevelopment, srcPath),
    },
    optimization: require('./optimization')(isEnvDevelopment),
    resolve: require('./resolve')(srcPath),
    devtool: isEnvDevelopment
      ? 'cheap-module-eval-source-map'
      : 'eval-source-map',
    plugins: require('./plugins')(env, defineEnv, publicPath, port, appHtml),
  }
}