WEBPACK学习笔记

70 阅读2分钟

webpack基础配置

1.安装webpack (3以下版本需要指定版本,不指定默认安装最新版本,4以后还要安装webpack-cli -g)

全局安装:npm i webpack webpack-cli -g

本地安装:npm i webpack@4.21

更改名字后打包需要添加指令 webpack --config webpack.configXXX.js

// cmd规范
module.exports={
    // 打包模式
    mode:"development",
    //配置入口文件
    // 对象(推荐)
    entry:{
        app1:"./app1.js",
        app2:"./app2.js"
    },
    //数组写法,当作一个入口
    // entry:["./app1.js","./app2.js"],

    //出口
    output:{
        path:__dirname +'/dist',//输出目录
        filename:"[name].[hash:4].bundle.js"//文件名,4位hash,bundle.js
    },
    //loader(基本格式)
    module:{
        rules:[
            {
                
            },
            {

            }
        ]
    },
    //插件
    Plugin:[new Plugin()],
    //代码压缩
    optimization:{}
    

}

webpack处理js

一,babel-loader的配置 babel-loader写入webpack配置 ——>定义编译配置(options或.bablerc)

安装 npm i babel-loader @babel/core --save-dev (前者调用后者编译)

            {
                test:/\.js$/,//正则对什么文件处理
                // loader:"bable-loder"//后面只能跟字符串
                //use:[],//数组可以配置多个loader,从后往前处理
                use:{//对象可以配置
                    loader:"bable-loader",
                    //preset-->@bable/preset-env相当于一套集合好的规范
                    options:{
                        preset:[
                            [
                                '@bable/preset-env',
                                {
                                    targets:{//目标
                                        browsers:[
                                            ">1%",//占有率
                                            "last 2 versions",//最后两个版本
                                            "not ie<=8",//大于ie8

                                        ]
                                    }
                                }
                            ]
                        ]
                    }
                },
            },

二,Eslint-loader(5后废弃)Eslint-webpack-plugin ——>定义配置 ——>定义规范

安装 npm i eslint @eslint --save-dev (前者调用后者编译)

.eslintrc
const { sources } = require("webpack");

module.exports= {
    env:{
        browser:true,
        es2021:true,
        //集成别人规范
        //eslint-config-standard
        //eslint-config-airbnb
        extends:[
            "standard",
            //继承vue插件
            "plugins:vue/strongly-recommended"
        ],
        //特殊语法支持(如vue)
        Plugins:[
            //安装npm i eslint-plugin-vue
            //注册vue插件
            "vue"
        ],
        //解析配置
        parserOptions:{
            ecmaVersion:6,//es版本
            sourceType:"module",//模块
            //检查
            ecmaFeatrue:{
                jsx:true
            }
        },
        //检查细节(重要最高优先级)
        rules:{
            //eslint官网查看
        }
    }
}

css与资源文件的处理

webpack不认识css

js中引入css一定会打包失败————>css-loader(让webpack识别css)————> {style-loader(css写入js,执行后作为style标签插入html)}或 {mini-css-extra-plugin(提取css作为独立文件)}

一,安装npm i css-loader style-loader mini-css-extra-plugin --save-dev

less-css处理

一,安装npm i less less-loader

css压缩 一,安装npm i css-minimizer-webpack-plugin --save-dev

处理资源文件

js中引入css————>File-loader,url-loader(webpack5自带对资源文件支持)————>一些优化(hash,base64)

一,安装npm i File-loader url-loader --save-dev

            //处理css
            {
                test:/\.css$/,//正则对什么文件处理
                use:[minicss.cssloader,"style-loader","css-loader"],//数组可以配置多个loader,从后往前处理
            },
            //处理less
            {
                test:/\.less$/,//正则对什么文件处理
                use:[minicss.cssloader,"css-loader","less-loader"],//处理less,css,生成单独文件
            },
            //处理静态资源
            {
                test:/\.(jpg|png|svg|gif)$/,//正则对什么文件处理
                loader:"url-loader",
                options:{
                    limit:0,//转base64
                    name:"[name].[hash:4].[ext]"
                }
            },
            //处理静态资源(5以上版本)
            {
                test:/\.(jpg|png|svg|gif)$/,//正则对什么文件处理
                type:"asset",//自定义 asset/inline/ 转base64 asset/inline/resource 作为独立文件 
                parser:{
                    dataUrlCondition:{
                        maxSize:5000
                    }
                },
                generator:{
                    name:"[name].[hash:4][ext]"
                }
            },

webpack处理html

浏览器———>html———>{js+css}

安装 npm i html-webpack-piugin --save-dev

        //html插件
        new htmlwebpack({
            template:'./index.html',
            filename:"index.html",//配置文件名
            chunks:["app"],//选项
            //压缩相关
            minify:{
                collapseWhitespace:false,//一行显示
                removeComments:false,//移除注释
            },
            //js插入位置
            inject:body,//body header
            //模板字符串<% %>
            arr:[{}]

        }),
        

代码分割

单入口:runtime+vendor+核心模块+异部模块 多入口:runtime+vendor+每个核心业务代码+common

    //代码压缩
    optimization:{
        //代码分割
        splitChunks:{
            chunks:"all",
            // minChunks:2,//重复次数
            // minSize:1000,//文件大小
            // name:"a",//拓展文件名字

            //指定模块分割特殊需求
            cacheGroups:{
                vendor:{
                    test:/[\//]node_modules[\//]/,
                    filename:"vendor.js",
                    chunks:all,
                    minChunks:1
                },
                //公用文件
                Common:{
                    filename:"common.js",
                    chunks:all,
                    minChunks:2,//重复次数
                    minSize:1000,//文件大小
                    name:"a",//拓展文件名字
                }
            }
        },
        //webpack运行js
        runtimeChunk:{
            filename:"runtime"
        }
    },

技巧配置

    resolve:{
        //路径别名
        alias:{
            "@css":"/css"
        },
        extensions:[".js"]//省略后缀
    }

开发模式

//源码地图
devtool:"eval-cheap-source-map",

//开发模式
devServer:{
    port:1000,
    hot:true,
    Proxy:{
        "https://xxxxxxx":{
            targets:"xxxxxxxx",
            //路径重写
            pathRewrite:{
                "^/":""
            }
        }
    },
}