发布于 2026-01-06 3 阅读
0

Webpack 详解:网站资源打包的现代方式 Webpack 究竟是什么? 第一个 Webpack 应用 添加加载器 添加插件 使用开发服务器 总结 感谢阅读

Webpack 详解:网站资源打包的现代方式

Webpack究竟是什么?

第一个 Webpack 应用

添加装载机

添加插件

使用开发服务器

总结

感谢阅读

管理资源可能是一项繁琐的任务。幸运的是,现在有了打包工具可以简化这项工作。在本文中,我们将介绍Webpack,它是目前最流行的打包工具之一。

Webpack乍一看似乎非常令人生畏,但本文将确保您拥有足够的知识来自行配置Webpack 。

我们开始做吧

Webpack究竟是什么?

让我们看看谷歌是如何定义它的:“webpack 是一个开源的 JavaScript 模块打包器。它主要用于 JavaScript,但如果包含相应的加载器,它也可以转换前端资源,例如 HTML、CSS 和图像。webpack 接收带有依赖关系的模块,并生成代表这些模块的静态资源。”

你可能在定义中遇到了一些新术语,例如“装载机”。在继续之前,我们先来了解一下这些术语:

  • 加载器加载器第三方扩展,可以帮助webpack处理各种文件扩展名。例如,有用于CSS 的加载器、用于图像的加载器等等。

    加载器的目标是将文件(JavaScript除外)转换为模块。文件转换为模块后,webpack 就可以将其作为依赖项用于你的项目中。

  • 插件插件第三方扩展程序,可以改变webpack 的工作方式。例如,有用于提取HTMLCSS以及处理微前端的插件。

第一个 Webpack 应用

让我们从小处着手。创建一个新文件夹,然后使用命令初始化一个新的 Node 项目npm init -y。使用以下命令安装webpack相关依赖项。npm i -D webpack webpack-cli

注意:Webpack依赖项应该始终是开发依赖项。

初始化以下文件:

// webpack.config.js

const path = require('path');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
  },
};
Enter fullscreen mode Exit fullscreen mode
<!-- public/index.html -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Webpack Demo</title>
  </head>
  <body>
    <script src="../dist/bundle.js"></script>
  </body>
</html>
Enter fullscreen mode Exit fullscreen mode
// src/index.html

console.log("Hello Webpack!")
Enter fullscreen mode Exit fullscreen mode

最后,将以下脚本添加到您的package.json

"scripts": {
    "build": "webpack --config webpack.config.js"
}
Enter fullscreen mode Exit fullscreen mode

现在你可以使用它npm run build来生成dist/bundle.js和运行public/index.html以利用生成的软件包。

添加装载机

你可能会想:“就为了这个,要花这么多功夫?”别担心,我的朋友, Webpack 的神奇之处就在这里。

使用并更新添加file-loader到我们的项目中npm i -D file-loaderwebpack.config.js

module.exports = {
    // ...
    module: {
        // defining the rules for additional modules, other than .js files
        // you can very well use rules for .js files too, eg: using babel-loader
        rules: [
            {
                // files the rule applies to (using RegEx is a good practice)
                test: /\.(png|jpe?g|svg)$/,
                // loaders & configuration
                use: [
                    {
                        loader: 'file-loader',
                        // if you skip the options, the default options will be used
                        options: {
                            name: '[name].[ext]',
                            outputPath: 'images/',
                        },
                    },
                ],
            },
        ],
    },
};
Enter fullscreen mode Exit fullscreen mode

现在您可以将图像文件导入到您的项目中。

// src/index.js

// NOTE: you can use ES Modules import/export statements
import natureImg from './assets/nature.jpg'

const img = document.createElement('img')
img.src = natureImg
document.body.appendChild(img)
Enter fullscreen mode Exit fullscreen mode

运行build脚本生成文件。打开public/index.html

页

添加插件

现在我们来优化HTML 的处理方式,以便webpack自动将脚本文件添加到页面中。html-webpack-plugin使用以下命令添加脚本文件npm i -D html-webpack-plugin

// webpack.config.js

// ...
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    // ...
    plugins: [
        new HtmlWebpackPlugin({
            template: './public/index.html',
        }),
    ],
};
Enter fullscreen mode Exit fullscreen mode

移除script标签public/index.html。Webpack会注入脚本。它还会在dist文件夹中生成一个额外的文件,你可以使用该文件index.html

使用开发服务器

频繁刷新页面会让人非常烦恼。为了解决这个问题,我们有webpack-dev-server……

使用以下命令安装依赖项npm i -D webpack-dev-server

// webpack.config.js

// ...
module.exports = {
    // ...
    devServer: {
        port: 3000, // default: 8000
    },
};
Enter fullscreen mode Exit fullscreen mode

最后,您还需要添加另一个脚本:

"start": "webpack serve --config webpack.config.js"
Enter fullscreen mode Exit fullscreen mode

现在你可以使用它npm start来启动webpack 服务器了。

总结

这就是关于webpack你需要知道的一切……它只是一个模块打包器,允许你使用加载器插件根据你的需求进行配置。你可以在以下文章中查看一些其他可用的插件:

希望你已经克服了对使用webpack的恐惧,并且这篇文章能对你的开发之旅有所帮助!

我目前正在开发一个使用完全自定义配置的Webpack 的项目,欢迎查看:

GitHub 标志 ruppysuppy /加密众筹

🤑💰 基于以太坊区块链的众筹平台,助您将创意项目变为现实

感谢阅读

需要一位顶尖的软件开发自由职业者来解决您的开发难题吗?请通过Upwork联系我。

想看看我最近在做什么吗?请访问我的个人网站GitHub。

想联系我?请在领英上联系我。

关注我的博客,即可Medium上获取每两周更新的精彩内容。

常问问题

以下是一些我经常被问到的问题。希望这个常见问题解答部分能解答您的疑问。

  1. 我是新手,应该如何学习前端Web开发?
    请参考以下文章:

    1. 前端热门词汇
    2. 前端开发路线图
    3. 前端项目构思
    4. 从初级前端开发人员过渡到中级前端开发人员
  2. 您愿意指导我吗?

    抱歉,我已经工作很忙了,没有时间指导任何人。

文章来源:https://dev.to/ruppysuppy/webpack-unpacked-a-pragmatic-guide-486f