const { join } = require('path'); const path = require('path'); const { readdirSync, statSync } = require('fs'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const isDev = process.env.RUNNING_ENV === 'dev'; const isProd = process.env.RUNNING_ENV === 'prod'; const webpack = require('webpack'); /** * 引入 src/view/pages下的页面文件,排除 _ 开头的文件夹 */ const importEntry = () => { const entries = {}; const rootDir = join(process.cwd(), '/view/page'); readdirSync(rootDir) .filter(i => !i.startsWith('_')) .forEach(file => { if (statSync(join(rootDir, file)).isDirectory()) entries[file] = `/view/page/${file}/index.ts`; }); console.log(entries); return entries; }; module.exports = { entry: importEntry(), output: { path: path.resolve(__dirname, 'public/dev'), publicPath: '', filename: '[name].js', chunkFilename: '[id].chunk.js?[hash:8]', }, mode: isDev ? 'development' : 'production', module: { rules: [ { test: /\.ts?$/, use: 'ts-loader', exclude: /node_modules/, }, { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/, }, { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'], }, { test: /\.less$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader'], }, { test: /\.(png|jpg|gif)$/i, use: [ { loader: 'url-loader', options: { limit: 8192, }, }, ], }, ], }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].css', chunkFilename: '[id].css?[hash:8]', }), new CopyPlugin([ { from: join(process.cwd(), 'view/assets'), to: 'assets' }, ]), new webpack.ProvidePlugin({ process: 'process/browser', Buffer: ['buffer', 'Buffer'], }), ].filter(Boolean), resolve: { extensions: ['.ts', '.js', '.ejs'], fallback: { crypto: require.resolve('crypto-browserify'), stream: require.resolve('stream-browserify'), assert: require.resolve('assert'), }, }, };