webpack入门 精细版

目录

[1. 什么是Webpack?它的主要功能是什么?](#1. 什么是Webpack?它的主要功能是什么?)

[2. Webpack的核心概念:](#2. Webpack的核心概念:)

3.通过Webpack5搭建脚手架(代码)

1.终端命令

2.搭建初始骨架

3.配置出入口文件

4.打包index.html文件


1. 什么是Webpack?它的主要功能是什么?

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

  1. 模块打包

将项目中的所有模块(JavaScript、CSS、图片等)当作一个整体,通过依赖关系将它们打包成一个或多个静态资源文件。

  1. 依赖管理

Webpack可以分析模块之间的依赖关系,根据配置的入口文件找出所有依赖的模块,并将其整合到打包结果中。

  1. 文件转换

Webpack本身只能处理JavaScript模块,但通过加载器(Loader)的使用,可以将其他类型的文件(如CSS、LESS、图片等)转换为有效的模块,使其能够被打包到最终的结果中。

  1. 代码拆分

Webpack支持将代码拆分成多个模块,按需加载,实现按需加载和提升应用性能。

  1. 插件系统

Webpack提供了丰富的插件系统,可以通过插件实现各种功能的扩展,例如压缩代码、自动生成HTML文件等。

总之,Webpack的主要功能是将项目中的多个模块打包成一个或多个静态资源文件,并提供了丰富的功能和插件系统来满足前端开发的需求。

2. Webpack的核心概念:

Webpack的核心概念包括entry(入口)、output(输出)、loader(加载器)和plugin(插件)。

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

综上所述,Webpack的核心概念包括entry、output、loader和plugin。

  • entry指定Webpack的入口文件
  • output定义打包输出的文件及路径
  • loader用于处理不同类型的文件
  • plugin用于扩展Webpack的功能

这些概念共同协作,实现了模块打包和构建的功能

3.通过Webpack5搭建脚手架(代码)

1.终端命令

** node

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

npm init

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

npm install webpack webpack-cli

安装完成后的目录如下:

2.搭建初始骨架

(1)、在项目的根目录下,src文件夹通常存放项目的源代码,我们在src文件夹下新建一个main.js文件和tools文件夹:

(2)、在main.js里引入add()方法

(3)、在public文件夹新建一个index.html文件,如图所示:

3.配置出入口文件

在根目录新建webpack.config.js文件,配置出入口:

javascript 复制代码
const path = require("path")

module.exports = {
  mode: 'development', // 指定为开发模式

  // 入口文件
  entry: {
    main: './src/main.js'
  },
  // 出口文件
  output: {
    // 输出到dist文件夹(打包自动生成)
    path: path.resolve(__dirname, 'dist'), // __dirname:表示当前文件的绝对路径(根目录)
    // 输出文件名在dist文件夹里的js文件夹的chunk.js下
    filename: 'js/chunk-[contenthash].js' // 使用由生成的内容产生的 hash
  }
}

现在,我们已经配置好了webpack。在package.json中,我们创建一个运行webpack命令构建脚本:

当我们在终端输入:

npm run build

可以看见:在项目的目录里自动生成了一个dist文件夹和dist/chunk的文件

可以发现对比传统脚手架的npm run build,我们自己搭建的脚手架并没有在dist文件夹里生成index.html文件,现在我们来试试吧!

4.打包index.html文件

1、下载html-webpack-plugin插件

npm install html-webpack-plugin -D

2、在webpack.config.js文件里引入

此时我们把原先的dist文件夹删掉,重新执行npm run build 指令

可以看见我们已经生成了index.html文件啦,让我们打开进入到index.html文件并通过鼠标右键的Open With Live Serve打开页面试试吧!

Webpack的loader是用于处理模块文件的转换工具

它们可以将不同类型的文件(如CSS、LESS、图片等)转换为可以被Webpack处理的有效模块,以便将其包含在最终的打包结果中。

以下是一些常用的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可以识别的模块。
  • 这只是一些常用的Webpack loader,实际上还有很多其他的loader可以根据具体的需求进行选择和配置。使用适当的loader可以提高开发效率并优化最终打包结果。

话不多说,我们去尝试一下用loader处理css文件,首先安装必要的依赖包:

npm install css-loader style-loader

接着,在webpack.config.js里添加对应配置:

javascript 复制代码
module: {
    rules: [
      {
        test: /\.css$/, // 正则匹配css文件
        use: ['style-loader','css-loader'] // 注意顺序!是从后往前加载的(即先加载css-loader,再加载style-loader)
      }
    ]
  }

接着我们重新在终端执行npm run build指令:

因此,我们平时使用的vue-cli脚手架为什么能识别css呢?这下明白了吧,原理就是css-loaderstyle-loader

同理,如果我们项目中想采用less的写法,则需要先下载less-loader来处理.less结尾的文件

举例:

复制代码
npm i less-loader -D

在webpack.config.js中添加配置

相关推荐
畅畅畅哥哥1 小时前
Next.js App Router 实战避坑:状态、缓存与测试
前端·前端框架
一水鉴天1 小时前
整体设计 定稿 之20 拼语言表述体系之3 dashboard.html完整代码
java·前端·javascript
一颗烂土豆1 小时前
React 大屏可视化适配方案:vfit-react 发布 🚀
前端·javascript·react.js
Qinana1 小时前
构建一个融合前端、模拟后端与大模型服务的全栈 AI 应用
前端·后端·程序员
加洛斯1 小时前
箭头函数的艺术:如何优雅的写好JS代码
前端·javascript
克喵的水银蛇1 小时前
Flutter 自定义 Widget 实战:封装通用按钮 + 下拉刷新列表
前端·javascript·flutter
Li_na_na011 小时前
React+dhtmlx实现甘特图
前端·react.js·甘特图
用户2965412759171 小时前
JSAPIThree 加载 Cesium 数据学习笔记:使用 Cesium 地形和影像服务
前端
csdn小瓯1 小时前
一个现代化的博客应用【react+ts】
前端·react.js·前端框架