webpack探寻之路

webpack探寻之路

准备工作: 全局安装webpack-cli 和webpack

1、核心概念

		entry,output,loader,plugin,mode
const {
    resolve
} = require('path');
module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build')
    },
    //  loader 配置
    module: {
    },
    plugins: [],
    mode: 'development'
}

2、打包样式资源

编译loader中use从右向左的顺序编译,类似栈操作的顺序(先进后出)
// 以sass为例
cnpm install node-sass  sass-loader -D
		rules: [{
            test: /\.scss$/,
            use: ['style-loader', 'css-loader', 'sass-loader']
        }]

3、打包html资源

HtmlWebpackPlugin会将template中的html打包进build目录,并自动添加script、link等标签去引入对应资源。

const HtmlWebpackPlugin = require(‘html-webpack-plugin’);

new HtmlWebpckPlugin({
            template: './index.html'
        })

4、打包图片资源

			// 问题: url-loader默认使用es6模块化解析,而html-loader引入图片是common.js
            // 解决: 关闭url-loader的es6模块化,使用commonjs解析
            {
                // 处理不了html中的图片 <img>标签
                test: /\.(jpg|png|gif)$/,
                // 下载url-loader file-loader
                loader: 'url-loader',
                options: {
                    // 图片大小小于8kb,就会被base64处理
                    // 优点: 减少请求数量
                    // 缺点: 图片体积更大
                    limit: 8 * 1024,
                    esModule: false
                }
            },
            {
                test: /\.html$/,
                loader: 'html-loader'
            }

5、打包其他资源

打包除了html,css,js文件以外的资源,使用file-loader

{
	exclude: /\.(css|js|html)$/,
	loader: 'file-loader'
}

6、devServer

	// 开发服务器devserver
    // 特点: 没有输出,在内存中打包
    // 启动指令:npx  webpack-dev-server
    devServer: {
        contentBase: resolve(__dirname, 'build'),
        // 启动gzip压缩
        compress: true,
        port: 3000
    }

7、css提取成单独文件

用minicssextractplugin.loader替代style-loader

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
			{
                test: /\.scss$/,
                // MiniCssExtractPlugin 取代 stye-loader
                use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
            }
            
            
new MiniCssExtractPlugin({
	            filename: 'css/built.css'
	        })

8、css样式兼容性处理

使用postcss-loader和autoprefixer

npm i postcss-loader autoprefixer -D

在项目目录下创建postcss.config.js, 内容如下:

module.exports = {
    plugins: [
        require('autoprefixer')
    ]
}

在webpack.config.js中,在css-loader和sass-loader中加上postcss-loader:

use: ['style-loader',  'css-loader', 'postcss-loader', 'sass-loader']

9、其他优化

项目大了自然会出现一些性能问题,webpack提供了happyPack、thread-loader、tree-shaking等等一些技术进行优化,详细可以查看官方文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值