当前位置: 首页 > news >正文

Webpack基础

目录

一、Webpack概念

二、Webpack使用步骤

三、Webpack.config.js配置文件

四、entry 和 output

1. entry

 2. output

五、module

1. CSS

2. 图片

3. babel

4. 总结

六、plugins

1.自动生成 html 文件

七、其它

1.webpack-dev-server 开发服务器

2. mode 打包模式

3. devtool

参考:


一、Webpack概念

  • 当我们习惯了在node中编写代码的方式后,再回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。
  • 我们就迫切的希望有一款工具可以对代码进行打包,将多个模块打包成一个文件。这样一来即解决了兼容性问题,又解决了模块过多的问题。
  • 构建工具就起到这样一个作用,通过构建工具可以将使用ESM规范编写的代码转换为旧的JS语法,这样可以使得所有的浏览器都可以支持代码。

Webpack是一个前端模块打包工具。它可以将多个模块按照依赖关系进行静态分析,并生成一个或多个打包后的文件。

作用:把静态模块内容,压缩,这个和,转译等(前端工程化)。

  • 把 less/sass 转成 css 代码

  • 把 ES6+ 降级成 ES5 等

  • 支持多种模块文件类型,多种模块标准语法


二、Webpack使用步骤

1.新建一个主文件夹(名为webpack),然后初始化包环境,得到 package.json 文件

npm init -y

2.安装 webpack 以及 webpack-cli 依赖包

npm i webpack webpack-cli --save-dev

3.把 webpack 命令配置到 package.json 的 scripts 自定义命令,作为局部命令使用

  "scripts": {"build": "webpack"},

4.创建文件夹src,在src里创建index.js编写代码

5.开始运行,采用自定义命令的方式:npm run 自定义命令名字

npm run build
  • 注意:实际上在终端运行的是 build 右侧的具体命名

6.此时会自动产生 dist 文件夹(压缩和优化后,用于最终运行的代码),默认里面会有一个main.js文件


三、Webpack.config.js配置文件

在项目根目录创建 Webpack.config.js 配置文件,它提供一个配置对象,Webpack将根据这个对象来打包应用程序。

核心概念:

  • Entry(入口):Webpack将从指定的入口文件开始分析和构建依赖关系树。入口可以是单个文件或多个文件,Webpack会根据入口配置找出所有的依赖模块。
  • Output(出口):指定Webpack打包后的文件输出的路径和文件名。可以通过配置output选项来指定输出文件的路径、名称和格式等。
  • Loader(加载器):Webpack本身只能处理JavaScript模块,但通过Loader的使用,可以处理其他类型的文件(如CSS、LESS、图片等)。Loader的作用是在模块加载时对其进行转换和处理。
  • Plugin(插件):插件用于扩展Webpack的功能。它可以在打包的不同阶段执行特定的任务。例如,可以使用插件来压缩代码、拆分代码、生成HTML文件等。插件通过在Webpack配置中引入并实例化,然后将其添加到plugins数组中。

示例:

const path = require('path')
const HTMLPlugin = require('html-webpack-plugin')module.exports = {mode: "production",  //设置打包模式,production表示生产模式,development表示开发模式//entry用来指定打包时的主文件,默认 ./src/index.js// entry: ['./src/a.js', './src/b.js'],  //合并打包// entry: {  //分别打包//   a: './src/a.js',//   b: './src/b.js'// },//output用来配置打包后的地址,默认 ./dist/main.js// output: {//   path: path.join(__dirname, 'hello'),  //指定打包的目录,必须是绝对路径//   filename: '[name]-[id]-[hash].js',  //打包后的文件名//   clean: true  //自动清理打包目录 (dist目录)// }//加载器,处理非js文件module: {rules: [{test: /\.css$/i,  //处理cssuse: ['style-loader', 'css-loader']  //从右向左执行},{test: /\.(jpg|png|gif)$/i,  //处理图片type: 'asset/resource'},{test: /\.m?js$/i,  //处理js(ES6+ 转译)exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env']}}}]},//插件,增强功能plugins: [new HTMLPlugin({template: './src/index.html'})],devtool: 'inline-source-map'  //用于调试代码}

四、entry 和 output

1. entry

定义打包的起点文件,Webpack 从入口开始分析依赖。

单入口(SPA):

entry: './src/index.js',

多入口(MPA):

entry: {app: './src/app.js',admin: './src/admin.js',
},

 2. output

定义打包后文件的输出位置和命名规则。

output: {path: path.resolve(__dirname, 'dist'), // 输出目录(绝对路径)filename: '[name].[contenthash].js',   // 输出文件名模板clean: true,                          // 每次构建前清空输出目录publicPath: '/assets/',               // 资源公共路径(CDN 场景使用)chunkFilename: '[id].[chunkhash].js', // 非入口 chunk 文件名(如异步加载模块)
},

占位符

  • [name]:入口名称(多入口时使用)。

  • [contenthash]:文件内容哈希(用于缓存优化)。

  • [id]:模块标识符。


五、module

Webpack 默认只识别 JS 和 JSON 文件内容,所以想要让 Webpack 识别更多不同内容,需要使用加载器。

1. CSS

在 src 目录下新建一个 style 文件夹,存放 style.css 文件,然后在index.js中引入:

import './style/index.css'

 此时还不能生效,还需要下载依赖包并进行配置。

下载:

npm i css-loader style-loader --save-dev

在 module 下的 rules 数组中配置: 

{test: /\.css$/i,use: ['style-loader', 'css-loader']
}
  • css-loader 只负责打包,style-loader 负责渲染生效
  • loader 执行顺序为从后向前执行,因此 use 的数组顺序不能调换

2. 图片

图片使用方法类似,先在index.js中引入:

import pic from './assets/pixmap.png'

然后配置:

{test: /\.(jpg|png|gif)$/i,type: 'asset/resource'
}

ps:webpack 内置了资源模块的打包,无需下载额外 loader。


3. babel

  • 在编写js代码时,经常需要使用一些js中的新特性,而新特性在旧的浏览器中兼容性并不好。此时就导致我们无法使用一些新的特性。

  • 但是我们现在希望能够使用新的特性,我们可以采用折中的方案。依然使用新特性编写代码,但是代码编写完成时我们可以通过一些工具将新代码转换为旧代码。

  • babel就是这样一个工具,可以将新的js语法转换为旧的js,以提高代码的兼容性。

安装:

npm install -D babel-loader @babel/core @babel/preset-env
    • @babel/core:babel的转换核心
    • @babel/preset-env:预设环境

    配置:

    {test: /\.m?js$/i,exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env']}}
    }

    还可以在package.json中设置兼容列表:

    "browserslist": ["defaults"]

    4. 总结

    常用的Webpack loader:

    • babel-loader:将ES6+代码转换为ES5语法,以便在旧版本的浏览器中运行。
    • style-loader 和 css-loader:用于处理CSS文件。css-loader主要负责处理样式文件中的import和url语句,而style-loader将转换后的CSS模块直接注入到HTML页面中。
    • file-loader 和 url-loader:用于处理图片和其他资源文件。file-loader会为每一个文件生成一个对应的文件,而url-loader将小于设定大小的文件转换为base64编码的URL,减少HTTP请求。
    • sass-loader 和 less-loader:用于处理Sass和Less预处理器。它们将Sass和Less代码转换为普通的CSS代码。
    • postcss-loader:用于为CSS代码添加浏览器兼容性前缀,以确保在不同浏览器上的一致性。
    • html-loader:用于处理HTML文件,将其中的图片等资源转换为Webpack可以识别的模块。

    六、plugins

    1.自动生成 html 文件

    html-webpack-plugin 这个插件可以在代码打包后,自动在打包目录生成html页面。

    下载:

    npm i html-webpack-plugin --save-dev

    引入依赖:

    const HTMLPlugin = require("html-webpack-plugin")

    配置:

    plugins: [new HTMLPlugin({// title: "Hello Webpack",  //设置titletemplate: "./src/index.html"  //模板,自动引入script脚本})
    ]

    七、其它

    1.webpack-dev-server 开发服务器

    每次改动代码,都要重新打包,很麻烦,所以这里给项目集成 webpack-dev-server 开发服务器。

    作用:启动 Web 服务,并自动检测代码变化热更新到网页。

    下载:

    npm i webpack-dev-server --save-dev

    可以在 package.json 中配置自定义命令:

    "scripts": {"dev": "webpack serve --mode=development"
    }

    使用:

    npm run dev
    • 此时在 js / css 文件中修改代码保存后,会实时反馈到浏览器。

    2. mode 打包模式

    指定构建模式,Webpack 会根据模式启用内置优化。

    可选值:

    • 'development':启用开发工具(如 source map)。

    • 'production':启用代码压缩、Tree Shaking 等优化。

    • 'none':不启用任何默认优化。

    模式名称模式名字特点场景
    开发模式development调试代码,实时加载,模块热替换等本地开发
    生产模式production压缩代码,资源优化,更轻量等打包上线

    如何设置影响 Webpack呢?

    • 方式1:在 webpack.config.js 配置文件设置 mode 选项

      // ...
      module.exports = {// ...mode: 'production'
      }
    • 方式2:在 package.json 命令行设置 mode 参数

      "scripts": {"build": "webpack --mode=production","dev": "webpack serve --mode=development"
      },

    注意:命令行设置的优先级高于配置文件中的,推荐用命令行设置


    3. devtool

    可以配置源码的映射,方便调试打包后的代码。

    // ...
    module.exports = {// ...devtool:"inline-source-map"
    }

    参考:

    Webpack--入门只看这一篇就够了(图文+代码)-CSDN博客

    webpack超详细教程,学webpack看这一篇就够了!(上)_webpack教程-CSDN博客

    webpack超详细教程,学webpack看这一篇就够了!(下)_new webpack.defineplugin-CSDN博客

    02_webpack介绍_哔哩哔哩_bilibili

    相关文章:

  1. DFS/BFS专练-搞定图论基础!(从海岛问题过渡至图论基础应用C++/C)
  2. 【Pandas】pandas DataFrame where
  3. 基于微信小程序的中医小妙招系统的设计与实现
  4. python抓取HTML页面数据+可视化数据分析(投资者数量趋势)
  5. Function Calling的机制 (含示例)
  6. SpringAI 学习笔记
  7. 斐波那契数列计算:数据结构与算法视角
  8. 【MySQL】初识数据库
  9. HDFS入门】HDFS安全与权限管理解析:从认证到加密的完整指南
  10. TypeScript 从入门到精通:完整教程与实战应用(一)
  11. git 出现 port 443 Connection timed out
  12. AIGC产品如何平衡用户体验与内容安全?
  13. 通过 Zotero 的样式编辑器(Style Editor)自定义文献引用和参考文献列表的格式
  14. pdfjs库使用记录1
  15. 2026《数据结构》考研复习笔记三(C++高级教程)
  16. 【“星瑞” O6 评测】—NPU 部署 face parser 模型
  17. Windows .NET Core 应用程序部署到 IIS 解决首次访问加载慢的问题
  18. 基于DeepSeek的考研暑假日志分析
  19. Transformer 架构 - 解码器 (Transformer Architecture - Decoder)
  20. 【前端HTML生成二维码——MQ】
  21. 政治局会议:优化存量商品房收购政策,持续巩固房地产市场稳定态势
  22. 潘功胜:一季度中国经济开局良好,金融市场展现出较强韧性
  23. 上海银行一季度净赚逾62亿增2.3%,不良贷款率与上年末持平
  24. 男子闲鱼卖手机卷入电诈案后成“网逃”续:警方已排除其作案嫌疑
  25. 《亡命驾驶》:一场对于男子气概的终极幻想
  26. 金融监管总局:支持将上海打造成具有国际竞争力的再保险中心