webpack.base.conf.js 1.73 KB
const webpack = require('webpack');
const path = require('path');
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');
var PostCompilePlugin = require('webpack-post-compile-plugin');
var TransformModulesPlugin = require('webpack-transform-modules-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const pkg = require('../package.json');
const isProd = process.env.NODE_ENV === 'production';
const distDir = path.join(__dirname, `../dist/statics/${pkg.name}`);

function resolve(dir) {
  return path.join(__dirname, '..', dir);
}


const webpackConfig = {
  mode: isProd ? 'production' : 'development',
  output: {
    filename: 'static/js/[name].[chunkhash].js',
    path: distDir,
    chunkFilename: 'static/js/[name].[chunkhash].js',
    publicPath: isProd ? '//cdn.yoho.cn/xianyu-ufo-app-web/' : '/'
  },
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      vue$: 'vue/dist/vue.runtime.esm.js',
      'lottie-web': 'lottie-web/build/player/lottie_light.min.js'
    },
    modules: [
      path.join(__dirname, '../apps'),
      'node_modules'
    ]
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        use: {
          loader: 'vue-loader',
          options: {
            extractCSS: isProd,
          }
        },
      },
      {
        resourceQuery: /blockType=client/,
        use: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.js$/,
        use: 'babel-loader',
        include: [resolve('apps'), /cube-ui/]
      },
    ]
  },
  plugins: [
    new webpack.HashedModuleIdsPlugin(),
    new FriendlyErrorsPlugin(),
    new PostCompilePlugin(),
    new TransformModulesPlugin(),
    new VueLoaderPlugin(),
  ]
};



module.exports = webpackConfig;