【前端】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
 //               }
//            }
//        ]
//    }
}
相关推荐
DcTbnk3 分钟前
脚本猫中的新建脚本:定时脚本、后台脚本、普通脚本,三个区别
前端
冴羽6 分钟前
涨见识了,Error.cause 让 JavaScript 错误调试更轻松
前端·javascript·node.js
一千柯橘15 分钟前
Electron 第一步
前端·electron
m***D28616 分钟前
JavaScript在Node.js中的内存管理
开发语言·javascript·node.js
我叫张小白。16 分钟前
JavaScript现代语法梳理:ES6+核心特性详解
开发语言·javascript·typescript·es6
code_Bo18 分钟前
Ant Design Vue 日期选择器英文不变更中文问题
前端·vue.js·ant design
啃火龙果的兔子19 分钟前
react-i18next+i18next-icu使用详解
前端·javascript·react.js
Hello eveybody21 分钟前
Node.js环境变量配置实战
node.js
彭于晏爱编程21 分钟前
🌹🌹🌹bro,AntD 6.0.0 来了
前端
q***615022 分钟前
Windows 上彻底卸载 Node.js
windows·node.js