透视前端工程化之 Webpack 基本介绍【文末有彩蛋~】(下)

简介: Webpack 是一款强大的打包工具。在 Webpack 中一切皆模块。Webpack 官网的 Banner 图完美地诠释了这一理念。Webpack 从一个入口文件开始递归地分析模块的依赖关系,根据依赖关系将这些模块打包成一个或多个文件。

4.4 使用插件


我们发现在构建的过程中,如果构建后的资源名称发生了变化,index.html 中对资源的引用会被动地跟着修改,非常不方便,我们引入 HtmlWebpack Plugin 来帮助我们自动生成入口文件,自动将生成的资源文件注入 index.html 中。


安装:


npm install --save-dev html-Webpack -plugin


配置:


const path = require("path");
const HtmlWebpack Plugin = require("html-Webpack -plugin");
module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  },
  plugins: [new HtmlWebpack Plugin()]
};


在配置文件中,我们引入插件,并在 plugins 选项中,将插件实例化后添加到数组中。该插件会自动生成 index.html,因此原目录中的 index.html 文件可以删除。


Webpack -demo
├── package.json
├── Webpack .config.js
├── dist
|    └── bundle.js
└── src
     └── index.js


再次执行构建命令:


$ npm run build
> Webpack -demo@1.0.0 build C:\work\tech\Webpack -demo
> Webpack
Hash: 39dc7567ef99a69140e7
Version: Webpack  4.29.6
Time: 1241ms
Built at: 2019-04-03 22:53:44
     Asset       Size  Chunks             Chunk Names
 bundle.js      1 KiB       0  [emitted]  main
index.html  182 bytes          [emitted]
Entrypoint main = bundle.js
[0] ./src/index.js 175 bytes {0} [built]


命令执行后我们发现我们的 ./dist 下多了一个 index.html 文件,并且 index.html 中的资源引用被自动更新为了 <script type="text/javascript" src="bundle.js"></script>


4.5 使用 loader 处理 css 文件


为了使 Webpack 可以处理 import 进来的 css 文件,我们需要安装并配置 style-loadercss-loader


npm install --save-dev style-loader css-loader


修改 Webpack 的配置如下:


const path = require("path");
const HtmlWebpack Plugin = require("html-Webpack -plugin");
module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"]
      }
    ]
  },
  plugins: [new HtmlWebpack Plugin()]
};


如此一来,当 Webpack 匹配到后缀为 .css 的文件都会使用 css-loader 和 style-loader 进行处理。


接下来我们在 ./src 目录下新增一个样式文件 main.css。在样式中,设置文本的字体颜色为红色。


// main.css
div{color: red}


紧接着我们在 ./src/index.js 中引用 main.css:


import "./main.css";
function createEl() {
  var element = document.createElement("div");
  element.innerHTML = "hello world";
  return element;
}
document.body.appendChild(createEl());


执行构建命令:


$ npm run build
> Webpack -demo@1.0.0 build C:\work\tech\Webpack -demo
> Webpack
Hash: f9fcb8cfd689f4b96ce6
Version: Webpack  4.29.6
Time: 2672ms
Built at: 2019-04-03 23:24:40
     Asset       Size  Chunks             Chunk Names
 bundle.js   6.85 KiB       0  [emitted]  main
index.html  182 bytes          [emitted]
Entrypoint main = bundle.js
[0] ./src/index.js 199 bytes {0} [built]
[1] ./src/main.css 1.05 KiB {0} [built]
[2] ./node_modules/css-loader/dist/cjs.js!./src/main.css 170 bytes {0} [built]
    + 3 hidden modules


在浏览器预览,不出意外字体的颜色已经变成了红色,打开浏览器调试工具,可以看到在 <head> 标签里插入了一个 <style> 标签。


<style type="text/css">
  div {
    color: red;
  }
</style>


通过以上完整的示例,我们演示了 Webpack 的核心的几个配置的使用方式,我们对 Webpack 的使用应该有了一个基本的认识。


Webpack 中还有很多其他有用的配置项,篇幅原因不做详细的介绍。大家可以查阅 官方文档 自行配置和练习。


总结


本节我们对 Webpack 进行了总体的介绍。借助 loader、Webpack 可以处理一切资源,JS 的、非 JS 的,都可以。通过插件,我们可以在 Webpack 的构建过程中的每个事件节点加入自己的行为,来影响 Webpack 的构建。对 Webpack 的使用有了认识,可以为我们搭建起项目的基本框架提供一个基础。


笔者有一个前端工程化的实践型课程刚刚上线——《透视前端工程化》


点击了解《透视前端工程化》


以 Vue 为例,结合笔者在团队中的工程化实践,带领大家从零开始搭建一个脚手架,将搭建脚手架用到的技术点逐一拆解,希望大家看完后,每个人都对脚手架和工程化思想有个较深入地理解。


相信在学完本课程后,大家至少有以下几点收获:


  • 对前端工程化有一个系统认知;


  • 能独立设计一套前端工程化解决方案;


  • 知识广度上有大幅提升;


  • 进入更好的平台,获得更好的薪酬。


相关文章
|
3天前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
16 5
|
4天前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
24 7
|
4天前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
13 2
|
10天前
|
前端开发 JavaScript 开发者
工程化(webpack+vite)
工程化(webpack+vite)
|
20天前
|
前端开发 JavaScript 开发者
构建工具对比:Webpack与Rollup的前端工程化实践
【10月更文挑战第11天】本文对比了前端构建工具Webpack和Rollup,探讨了它们在模块打包、资源配置、构建速度等方面的异同。通过具体示例,展示了两者的基本配置和使用方法,帮助开发者根据项目需求选择合适的工具。
16 3
|
2月前
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
22天前
|
前端开发 JavaScript Shell
深入解析前端构建利器:webpack核心概念与基本功能全览
深入解析前端构建利器:webpack核心概念与基本功能全览—
20 0
|
2月前
|
前端开发 JavaScript 开发者
工程化(webpack+vite)
工程化(webpack+vite)
|
2月前
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
79 13
|
3月前
|
JavaScript 前端开发 API
解锁前端开发新境界:Vue.js携手Webpack,打造高效构建流程,你的项目值得拥有!
【8月更文挑战第30天】随着前端技术的发展,模块化与组件化趋势愈发显著。Vue.js 以其简洁的 API 和灵活的组件系统,深受开发者喜爱;Webpack 则凭借强大的模块打包能力成为前端工程化的基石。两者结合,不仅简化了组件编写与引用,还通过模块热替换、代码分割等功能大幅提升开发效率。本文将通过具体示例,展示如何利用 Vue.js 和 Webpack 构建高效、有序的前端开发环境。从安装配置到实际应用,逐步解析这一组合的优势所在。
46 0