欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Webpack基础

Webpack基础

2025/4/24 5:24:08 来源:https://blog.csdn.net/2301_82023822/article/details/147153591  浏览:    关键词: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

    版权声明:

    本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

    我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

    热搜词