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/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;