const path = require('path'); const fs = require('fs'); const DefinePlugin = require('webpack/lib/DefinePlugin'); const CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin'); const { AutoWebPlugin } = require('web-webpack-plugin'); const autoPlugin = new AutoWebPlugin('./src/pages/', { template: (pageName) => { let templatePath = path.resolve('./src/pages/', pageName, 'template.html'); if (fs.existsSync(templatePath)) { return templatePath; } return './src/assets/template.html'; }, commonsChunk: { name: 'common', // 超过4个以上的页面都用到的公共模块就抽取到common里去 minChunks: 4, }, }); module.exports = { entry: autoPlugin.entry({ vendor: './src/assets/vendor', }), output: { publicPath: '', filename: '[name].js', }, resolve: { // 加快搜索速度 modules: [path.resolve(__dirname, 'node_modules')], // es tree-shaking mainFields: ['jsnext:main', 'browser', 'main'], // 加快编译速度 alias: { moment: 'moment/min/moment.min.js', }, // 支持 npm link symlinks: true, }, module: { // 这些库都是不依赖其它库的库 不需要解析他们可以加快编译速度 noParse: /node_modules\/(moment|chart\.js)/, rules: [ { test: /\.js$/, // cacheDirectory 缓存babel编译结果加快重新编译速度 loader: 'babel-loader?cacheDirectory', // 只命中src目录里的js文件,加快webpack搜索速度 include: path.resolve(__dirname, 'src') }, { test: /\.js$/, // 加载 imui 里的 // @require '.css' loaders: ['comment-require-loader'], include: [path.resolve(__dirname, 'node_modules/imui')] }, { test: /\.scss$/, loaders: ['style-loader', 'css-loader', 'sass-loader'], include: path.resolve(__dirname, 'src') }, { test: /\.css$/, loaders: ['style-loader', 'css-loader'], }, { test: /\.(gif|png|jpe?g|eot|woff|ttf|svg|pdf)$/, loader: 'file-loader', }, ] }, plugins: [ new DefinePlugin({ 'process.env': { // 'NODE_ENV': JSON.stringify('development') NODE_ENV: JSON.stringify(process.env.NODE_ENV) } }), autoPlugin, // 所有页面都会用到的基础运行环境 new CommonsChunkPlugin({ name: 'vendor', chunks: ['vendor', 'common'] }), ], devtool: 'source-map', };