webpack | 青训营

52 阅读3分钟

webpack

基本介绍

Webpack 是一个现代前端构建工具,主要用于将多个前端资源(例如 JavaScript、CSS、图片等)打包成一个或多个优化的文件,以便在浏览器中加载。它是开发者在构建复杂的前端应用程序时的重要工具之一,可以帮助管理项目中的模块依赖、优化资源加载性能以及进行代码转换和打包等任务。

Webpack 的一些基本概念和功能:

  • 入口(Entry):Webpack 构建过程的起点。入口指定了从哪个文件开始构建依赖图。一个应用通常有一个或多个入口文件。

  • 输出(Output):指定 Webpack 打包后生成的文件的输出目录和命名规则。这些文件包括合并和压缩后的代码,通常是一个或多个 JavaScript 文件。

  • 模块(Module):在 Webpack 中,一切皆为模块,包括 JavaScript 文件、CSS、图片、字体等。Webpack 使用加载器(Loaders)来处理不同类型的文件,将它们转换为有效的模块。

  • 加载器(Loaders):加载器是用于处理非 JavaScript 文件的插件,例如处理 CSS、图片、字体等文件。加载器允许你在导入模块时对文件进行预处理,然后将其转换为可以集成到依赖图中的模块。

  • 插件(Plugins):插件是 Webpack 的扩展,用于执行各种构建任务,例如代码压缩、代码分割、资源优化等。常见的插件有 HtmlWebpackPlugin(生成 HTML 文件)、MiniCssExtractPlugin(提取 CSS 文件)、UglifyJsPlugin(压缩代码)等。

  • 依赖图(Dependency Graph):Webpack 会根据入口文件和模块之间的导入关系构建一个依赖图。这个图描述了每个模块的依赖关系,以便 Webpack 可以了解哪些模块需要被包含在最终的打包文件中。

  • 代码分割(Code Splitting):通过代码分割,Webpack 可以将应用程序分割成多个包,从而实现按需加载,减少初始加载时间。

  • 热模块替换(Hot Module Replacement,HMR):在开发过程中,Webpack 可以使用 HMR 来实时更新修改过的模块,而无需刷新整个页面。

  • 环境(Environment):Webpack 可以根据开发环境和生产环境进行不同的配置,以实现开发时的调试和生产环境的优化。

  • 配置文件(Webpack Configuration):Webpack 的配置文件是一个 JavaScript 文件,用于配置入口、输出、加载器、插件等各种构建选项。

基本配置


// webpack.config.js

const path = require("path");

  


module.exports = {

mode: "development",

// 入口文件

entry: path.resolve(__dirname, "src", "main.js"),

// 出口

output: {

// 打包完的文件路径

path: path.resolve(__dirname, "dist"),

// 打包完的文件名

filename: "[name].[hash:8].js",

},

};


// package.json

"scripts": {

"build": "webpack --config webpack.config.js"

},

命令行输入


npm run build

webpack 主要做的事情

  1. import 语句转化为 __webpack_require__ 语句

  2. 将多个文件打包成一个文件

处理 css


// webpack.config.js

module: {

rules: [

// 处理css

{

// 匹配css

test: /\.css$/,

use: ["style-loader", "css-loader"],

},

],

}

接入 babel

babel: 将高版本 js 代码转译成低版本


// webpack.config.js

module: {

rules: [

{

test: /\.js$/,

use: [

{

loader: "babel-loader",

options: {

presets: ["@babel/preset-env"],

},

},

],

},

],

}


// main.js

class Person {

constructor(name) {

this.name = name;

}

}

  


const person = new Person("p");

  


console.log(person);