【前端】Webpack相关(长期更新)

webpack----前端打包工具

将多个模块的按依赖关系打包成一个或多个静态资源。

功能:模块打包、通过loader进行文件转换、代码拆分按需加载、扩展插件。

webpack主要包括 入口、输出、加载器、插件。

通过entry入口配置依赖;

通过output指定打包后输出文件命名及路径;

webpack本身只能处理js,通过loader可以处理css等其他类型文件;

通过plugins可以在打包时执行特定任务,比如 代码压缩、生成html文件等;

webpack5搭建:

1、npm init // 在空文件夹初始化package.json

2、npm install webpack webpack-cil //安装webpack及webpack-cil依赖包;

3、在utils中index.js写export const的一些通用方法;

4、在main.js中将3的方法导入,import {} from './utils/index';

5、在public中新建index.html,可通过!+Enter快捷键迅速搭建html基本框架,并修改title,在body写入id=app的div;

正式进入配webpack:

6、在webpack.config.js配置入口文件:

javascript 复制代码
const webpack = require('webpack');

module.exports = {
    //指定为开发模式,dev开发,pro生产,开发模式不会执行代码压缩和优化,生产会
    mode:'dev',                                
    entry:{ main: './src/main.js'},            //入口文件
    output:{                                   //出口文件
        path:path.resolve(__dirname, 'dist'),  //__dirname,为当前文件的绝对路径
        //使用由生成的内容产生hash,输出在dist文件夹的chunk.js下
        filename: 'js/chunk-[contenthash].js'    
    }
}

安装开发服务器:npm install --save-dev webpack-dev-server

javascript 复制代码
//const webpack = require('webpack');

module.exports = {
//    mode:'dev',                                //指定为开发模式,dev开发,pro生产
//    entry:{ main: './src/main.js'},            //入口文件
//    output:{                                   //出口文件
//        path:path.resolve(__dirname, 'dist'),  //__dirname,为当前文件的绝对路径
        //使用由生成的内容产生hash,输出在dist文件夹的chunk.js下
//        filename: 'js/chunk-[contenthash].js'    
//    }
    devServer: {
        contentBase:path.join(__dirname, 'dist'), 
        compress: true,
        port: 8080,    
    }
}

7、在package.json中创建一个运行webpack的构建脚本:在scripts中添加

eg: build: 'webpack'

8、在终端运行:npm run build,目录生成dist文件夹及目录下的chunk文件

要添加插件,生成html:

9、npm install html-webpack-plugin -D //安装插件

10、在webpack.config.js引入:

javascript 复制代码
//const webpack = require('webpack');

const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
//    mode:'dev',                                  //指定为开发模式
//    entry:{ main: './src/main.js'},              //入口文件
//    output:{                                     //出口文件
//        path:path.resolve(__dirname, 'dist'),    //__dirname,为当前文件的绝对路径
        //使用由生成的内容产生hash,输出在dist文件夹的chunk.js下
//        filename: 'js/chunk-[contenthash].js'    
//    },
    //可能插入多个插件,所以是数组形式
    plugins: [
        new HtmlWebpackPlugin({
            template:'./public/index.html  //指定模板文件
            filename:'index.html',    //打包后生成名称
            inject:'body'        //js插入body
        })
    ],
}

要添加css文件,进行加载:

11、在src/style/page.css书写通用样式;

12、在main.js引入:import './style/page.css';

13、npm install css-loader style-loader // 安装loader依赖包处理css文件

14、在webpack.config.js添加:

javascript 复制代码
//const webpack = require('webpack');

//const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
//    mode:'dev',                                  //指定为开发模式
//    entry:{ main: './src/main.js'},              //入口文件
//    output:{                                     //出口文件
//        path:path.resolve(__dirname, 'dist'),    //__dirname,为当前文件的绝对路径
        //使用由生成的内容产生hash,输出在dist文件夹的chunk.js下
//        filename: 'js/chunk-[contenthash].js'    
//    }
    //可能插入多个插件,所以是数组形式
//    plugins: [
//        new HtmlWebpackPlugin({
//            template:'./public/index.html  //指定模板文件
//            filename:'index.html',    //打包后生成名称
//            inject:'body'        //js插入body
//        })
//    ],
    module: {
        rules:[
            {
                test: /\.css$/, //正则匹配css文件
                // 从后往前加载,先css-loader,再style-loader
                use: ['style-loader','css-loader']
            }
        ]
    }
}

处理图像资源:

15、在src新建images存放图片

16、在main.js中引入:

javascript 复制代码
import img from './images/img.jpg'

const image = document.createElement('img');
image.src = img;
document.body.appendChild(image);

17、npm i file-loader url-loader -D

18、在webpack.config.js添加配置:

javascript 复制代码
//const webpack = require('webpack');

//const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
//    mode:'dev',                                  //指定为开发模式
//    entry:{ main: './src/main.js'},              //入口文件
//    output:{                                     //出口文件
//        path:path.resolve(__dirname, 'dist'),    //__dirname,为当前文件的绝对路径
        //使用由生成的内容产生hash,输出在dist文件夹的chunk.js下
//        filename: 'js/chunk-[contenthash].js'    
//    }
    //可能插入多个插件,所以是数组形式
//    plugins: [
//        new HtmlWebpackPlugin({
//            template:'./public/index.html  //指定模板文件
//            filename:'index.html',    //打包后生成名称
//            inject:'body'        //js插入body
//        })
//    ],
    module: {
        rules:[
            //{
            //    test: /\.css$/, //正则匹配css文件
                // 从后往前加载,先css-loader,再style-loader
            //    use: ['style-loader','css-loader']
            //}
            {
                test:/\.(png|jpg|gif|jpeg|webp|svg|ico)$/, // 正则匹配图片文件
                type:'asset',    // 使用asset模块
                generator:{    //生成输出文件-配置输出文件名
                    filename:'img/[name].[hash:6][ext]'
                },
                parser:{    //匹配图片大小
                    dataUrlCondition:{maxSize:10*1024}  //图片大小小于10kb
                }
            }
        ]
    }
}

每次执行npm run build生成的js文件实现覆盖:

19、在webpack.config.js的output里配置:

javascript 复制代码
//const webpack = require('webpack');

//const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
//    mode:'dev',                                  //指定为开发模式
//    entry:{ main: './src/main.js'},              //入口文件
    output:{                                     //出口文件
//        path:path.resolve(__dirname, 'dist'),    //__dirname,为当前文件的绝对路径
        //使用由生成的内容产生hash,输出在dist文件夹的chunk.js下
//        filename: 'js/chunk-[contenthash].js',    
        clean:true
    }
    //可能插入多个插件,所以是数组形式
//    plugins: [
//        new HtmlWebpackPlugin({
//            template:'./public/index.html  //指定模板文件
//            filename:'index.html',    //打包后生成名称
//            inject:'body'        //js插入body
//        })
//    ],
//    module: {
//        rules:[
            //{
            //    test: /\.css$/, //正则匹配css文件
                // 从后往前加载,先css-loader,再style-loader
            //    use: ['style-loader','css-loader']
            //}
//            {
//                test:/\.(png|jpg|gif|jpeg|webp|svg|ico)$/, // 正则匹配图片文件
//                type:'asset',    // 使用asset模块
//                generator:{    //生成输出文件-配置输出文件名
//                    filename:'img/[name].[hash:6][ext]'
//                },
//                parser:{    //匹配图片大小
//                    dataUrlCondition:{maxSize:10*1024}  //图片大小小于10kb
 //               }
//            }
//        ]
//    }
}
相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄1 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95272 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大2 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师2 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端