const HtmlWebpackPlugin = require('html-webpack-plugin'); const VueLoaderPlugin = require('vue-loader/dist/plugin').default; const webpack = require('webpack'); const WebpackBar = require('webpackbar'); const path = require('path'); module.exports = { mode: 'development', entry: { app: './examples/index.js', }, module: { rules: [ { test: /\.(vue|md)$/, loader: 'vue-loader', }, { test: /\.(js|jsx)$/, loader: 'babel-loader', options: { cacheDirectory: true, presets: [ [ '@babel/preset-env', { targets: { browsers: [ 'last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 9', 'iOS >= 8', 'Android >= 4', ], }, }, ], ], plugins: [ [ 'babel-plugin-import', { libraryName: 'ant-design-vue', libraryDirectory: '', // default: lib style: true, }, ], ['@ant-design-vue/babel-plugin-jsx', { transformOn: true }], '@babel/plugin-proposal-optional-chaining', '@babel/plugin-transform-object-assign', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-export-default-from', '@babel/plugin-proposal-class-properties', ], }, }, { test: /\.(png|jpg|gif|svg)$/, loader: 'file-loader', options: { name: '[name].[ext]?[hash]', }, }, { test: /\.less$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader', options: { sourceMap: true }, }, { loader: 'less-loader', options: { lessOptions: { sourceMap: true, javascriptEnabled: true, }, }, }, ], }, { test: /\.css$/, use: ['css-loader'], }, ], }, resolve: { alias: { 'ant-design-vue': path.join(__dirname, './components'), // vue$: 'vue/dist/vue.esm.js', }, extensions: ['.js', '.jsx', '.vue', '.md'], }, devServer: { historyApiFallback: { rewrites: [{ from: /./, to: '/index.html' }], }, disableHostCheck: true, hot: true, open: true, }, devtool: '#source-map', plugins: [ new webpack.HotModuleReplacementPlugin(), new HtmlWebpackPlugin({ template: 'examples/index.html', filename: 'index.html', inject: true, }), new VueLoaderPlugin(), new WebpackBar(), ], };