| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- //webpack.base.conf.js
- //'use strict'
- const path = require('path');
- const HtmlWebpackPlugin = require('html-webpack-plugin');
- const HappyPack = require('happypack');
- const happyThreadPool = HappyPack.ThreadPool({ size: 3 });
- module.exports = {
- // 入口起点
- entry: {
- app: [
- path.join(__dirname, '../src/index.js')
- ],
- vendor: ['react', 'react-dom', 'react-router-dom', 'antd']
- },
- // 输出
- output: {
- //publicPath:'./',
- path: path.resolve(__dirname, '../dist'),
- chunkFilename: '[name].[chunkHash:8].min.js',
- filename: "[name].[hash:8].js",
- },
- // 解析
- resolve: {
- alias: { //配置绝对路径
- 'tools': path.resolve(__dirname, '../src/tools'),
- 'store': path.resolve(__dirname, '../src/store'),
- 'pages': path.resolve(__dirname, '../src/pages'),
- 'assets': path.resolve(__dirname, '../src/assets'),
- 'routers': path.resolve(__dirname, '../src/routers'),
- 'components': path.resolve(__dirname, '../src/components'),
- 'containers': path.resolve(__dirname, '../src/containers'),
- 'react-draggable$': path.resolve(__dirname, '../node_modules/react-draggable/build/cjs/cjs.js'),
- },
- extensions: ['.js', '.jsx']
- },
- // loader
- module: {
- rules: [
- // 独立规则:用 babel-loader 直接转译含新语法的 npm 包(绕过 happypack 缓存)
- {
- test: /\.js$/,
- include: [
- path.resolve(__dirname, '../node_modules/react-draggable'),
- path.resolve(__dirname, '../node_modules/react-resizable')
- ],
- use: {
- loader: 'babel-loader',
- options: {
- cacheDirectory: false,
- presets: [
- ['@babel/preset-env', { targets: { ie: '11' } }],
- '@babel/preset-react',
- '@babel/preset-typescript',
- '@babel/preset-flow'
- ],
- plugins: [
- ["@babel/plugin-proposal-decorators", {"legacy": true}],
- ["@babel/plugin-proposal-class-properties", {"loose": true}],
- "@babel/plugin-proposal-optional-chaining",
- "@babel/plugin-proposal-nullish-coalescing-operator"
- ]
- }
- }
- },
- {
- test: /\.js|jsx$/,
- exclude: /node_modules/,
- //loader: 'babel-loader'
- use: ['happypack/loader?id=babel']
- },
- {
- test: /\.css$/,
- //use: ['style-loader', 'css-loader']
- use: ['happypack/loader?id=css']
- },
- {
- test: /\.less$/,
- //use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
- use: ['happypack/loader?id=less']
- },
- {
- test: /\.(jpg|jpeg|png|gif|eot|svg|ttf|woff)/,
- exclude: /node_modules/,
- use: [{
- loader: 'url-loader',
- options: {
- limit: 8192,
- name: 'images/[hash:8].[name].[ext]'
- }
- }],
- }
- ]
- },
- // 插件
- plugins: [
- new HappyPack({
- id: 'less',
- loaders: [
- 'style-loader',
- 'css-loader',
- {
- loader: 'postcss-loader',
- options: { sourceMap: true }
- },
- 'less-loader'
- ],
- verbose: true,
- threadPool: happyThreadPool
- }),
- new HappyPack({
- id: 'css',
- loaders: [
- 'style-loader',
- 'css-loader'
- ],
- verbose: true,
- threadPool: happyThreadPool
- }),
- new HappyPack({
- id: 'babel',
- loaders: [{
- loader: 'babel-loader',
- options: {
- cacheDirectory: true
- }
- }],
- verbose: true,
- threadPool: happyThreadPool
- }),
- new HtmlWebpackPlugin({
- filename: 'index.html',
- template: path.join(__dirname, '../public/index.html'),
- minify: {
- collapseWhitespace: true,
- collapseInlineTagWhitespace: true,
- removeComments: true,
- removeRedundantAttributes: true
- },
- inject: 'body'
- })
- ]
- }
|