const fs = require('fs'); const path = require('path'); const webpack = require('webpack'); module.exports = { mode: 'development', entry: fs.readdirSync(__dirname).reduce((entries, dir) => { const fullDir = path.join(__dirname, dir); const entry = path.join(fullDir, 'app.js'); if (fs.statSync(fullDir).isDirectory() && fs.existsSync(entry)) { entries[dir] = ['webpack-hot-middleware/client', entry]; } return entries; }, {}), output: { path: path.join(__dirname, '__build__'), filename: '[name].js', publicPath: '/__build__/', }, module: { rules: [ { test: /\.jsx?$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: options.babelQuery, }, }, { test: /\.css$/, exclude: /node_modules/, use: ['style-loader', 'css-loader'], }, { test: /\.less$/, use: [ { loader: 'style-loader', }, { loader: 'css-loader', options: { modules: { getLocalIdent: (context, _, localName) => { if ( context.resourcePath.includes('node_modules') || context.resourcePath.includes('ant.design.pro.less') || context.resourcePath.includes('global.less') ) { return localName; } const match = context.resourcePath.match(/src(.*)/); if (match && match[1]) { const antdProPath = match[1].replace('.less', ''); const arr = slash(antdProPath) .split('/') .map((a) => a.replace(/([A-Z])/g, '-$1')) .map((a) => a.toLowerCase()); return `panda-pro${arr.join('-')}-${localName}`.replace(/--/g, '-'); } return localName; }, }, }, }, { loader: 'less-loader', options: { javascriptEnabled: true, }, }, ], }, { test: /\.css$/, include: /node_modules/, use: ['style-loader', 'css-loader'], }, { test: /\.(eot|otf|ttf|woff|woff2)$/, use: 'file-loader', }, { test: /\.svg$/, use: [ { loader: 'svg-url-loader', options: { // Inline files smaller than 10 kB limit: 10 * 1024, noquotes: true, }, }, ], }, { test: /\.(jpg|png|gif)$/, use: [ { loader: 'url-loader', options: { limit: 10 * 1024, }, }, ], }, { test: /\.html$/, use: 'html-loader', }, { test: /\.(mp4|webm)$/, use: { loader: 'url-loader', options: { limit: 10000, }, }, }, ], }, resolve: { extensions: ['.jsx', '.js'], }, plugins: [new webpack.HotModuleReplacementPlugin(), new webpack.NoEmitOnErrorsPlugin()], };