webpack学习笔记(二)

描述

当前优化:新增了less sass typescript的支持、新增js的兼容处理babel、新增js css压缩,增加html引入图片、css等资源的处理;extract-text-webpack-plugin插件不支持webpack4.x,改用mini-css-extract-plugin
下期主要优化:sourcemap的输出、优化打包配置(主要对css、js的chunk合并项优化)


项目地址

https://gitee.com/ziyuan_xcc/learn-webpack

环境安装

tips:node-sass可能出现安装不成功的情况,请使用cnpm并且删除依赖重试;

npm install;
npm run build;

webpack.config.js

路径./webpack.config.js

const path = require('path')
const Webpack = require('Webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const {
    CleanWebpackPlugin
} = require('clean-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')

module.exports = {
    // 入口(entry)
    entry: {
        vendor: './src/vendor.js',
        main: './src/index.js'
    },
    // 输出(output)
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].[chunkhash].js'
    },
    // 使用 source map
    // devtool: 'source-map',
    // loader
    module: {
        rules: [
            // 识别js
            {
                test: /\.js$/,
                use: 'babel-loader'
            },
            // 加载ts
            {
                test: /\.tsx?$/,
                use: 'ts-loader'
            },
            // 加载 CSS
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader, {
                    loader: "css-loader"
                }]
            },
            // 加载less
            {
                test: /\.less$/,
                use: [MiniCssExtractPlugin.loader, {
                    loader: "css-loader"
                }, {
                    loader: "less-loader"
                }]
            },
            // 加载scss
            {
                test: /\.scss$/,
                use: [MiniCssExtractPlugin.loader, {
                    loader: "css-loader"
                }, {
                    loader: "sass-loader"
                }]
            },
            // 加载sass
            {
                test: /\.sass$/,
                use: [MiniCssExtractPlugin.loader, {
                    loader: "css-loader"
                }, {
                    loader: "sass-loader"
                }]
            },
            // 加载图片
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: [
                    'file-loader'
                ]
            },
            // 加载字体
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    'file-loader'
                ]
            },
            //把jquery变成 $ 暴露到window
            {
                test: require.resolve('jquery'),
                use: 'expose-loader?$'
            },
            //把lodash变成 _ 暴露到window
            {
                test: require.resolve('lodash'),
                use: 'expose-loader?_'
            }
        ]
    },
    // 插件(plugins)
    plugins: [
        // 打包前清理
        new CleanWebpackPlugin(),
        // js压缩处理
        new UglifyJsPlugin({
            uglifyOptions: {
                warnings: false
            },
            parallel: true,
            // sourceMap: true
        }),
        // 生成hash id
        new Webpack.HashedModuleIdsPlugin(),
        // 打包预编译
        new Webpack.optimize.ModuleConcatenationPlugin(),
        // html处理
        new HtmlWebpackPlugin({
            template: './src/index.html'
        }),
        // css提取
        new MiniCssExtractPlugin({
            filename: "[name].[chunkhash].css",
            chunkFilename: "[id].css"
        }),
        // css压缩
        new OptimizeCSSAssetsPlugin(),
        // 复制引用资源
        new CopyWebpackPlugin([{
            from: './static',
            to: 'static',
            ignore: ['.*']
        }])
    ]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值