首页 > 其他分享 >webpack 概念

webpack 概念

时间:2023-08-28 13:56:54浏览次数:27  
标签:插件 loader 概念 webpack output path js

webpack 概念

本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。

在开始前你需要先理解一些核心概念:

  • 入口(entry)
  • 输出(output)
  • loader
  • 插件(plugin)
  • 模式(mode)
  • 浏览器兼容性(browser compatibility)
  • 环境(environment)

入口(entry)

入口起点(entry point) 指示 webpack 应该使用哪个模块,来作为构建其内部 依赖图(dependency graph) 的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

默认值是 ./src/index.js,但你可以通过在 webpack configuration 中配置 entry 属性,来指定一个(或多个)不同的入口起点。例如:
webpack.config.js

module.exports = {
  entry: './path/to/my/entry/file.js',
};

输出(output)

output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。主要输出文件的默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中。
你可以通过在配置中指定一个 output 字段,来配置这些处理过程:
webpack.config.js

const path = require('path');

module.exports = {
  entry: './path/to/my/entry/file.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'my-first-webpack.bundle.js',
  },
};

在上面的示例中,我们通过 output.filename 和 output.path 属性,来告诉 webpack bundle 的名称,以及我们想要 bundle 生成(emit)到哪里。可能你想要了解在代码最上面导入的 path 模块是什么,它是一个 Node.js 核心模块,用于操作文件路径。

loader

webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力。loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。
在更高层面,在 webpack 的配置中,loader 有两个属性:

  1. test 属性,识别出哪些文件会被转换。
  2. use 属性,定义出在进行转换时,应该使用哪个 loader。

webpack.config.js

const path = require('path');

module.exports = {
  output: {
    filename: 'my-first-webpack.bundle.js',
  },
  module: {
    rules: [{ test: /\.txt$/, use: 'raw-loader' }],
  },
};

以上配置中,对一个单独的 module 对象定义了 rules 属性,里面包含两个必须属性:test 和 use。这告诉 webpack 编译器(compiler) 如下信息:

“嘿,webpack 编译器,当你碰到「在 require()/import 语句中被解析为 '.txt' 的路径」时,在你对它打包之前,先 use(使用) raw-loader 转换一下。”

插件(plugin)

loader 用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量。
想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建一个插件实例。
webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 用于访问内置插件

module.exports = {
  module: {
    rules: [{ test: /\.txt$/, use: 'raw-loader' }],
  },
  plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
};

在上面的示例中,html-webpack-plugin 为应用程序生成一个 HTML 文件,并自动将生成的所有 bundle 注入到此文件中。

模式(mode)

通过选择 development, production 或 none 之中的一个,来设置 mode 参数,你可以启用 webpack 内置在相应环境下的优化。其默认值为 production。
webpack.config.js

module.exports = {
  mode: 'production',
};

浏览器兼容性(browser compatibility)

Webpack 支持所有符合 ES5 标准 的浏览器(不支持 IE8 及以下版本)。webpack 的 import() 和 require.ensure() 需要 Promise。如果你想要支持旧版本浏览器,在使用这些表达式之前,还需要 提前加载 polyfill。

环境(environment)

Webpack 5 运行于 Node.js v10.13.0+ 的版本。

标签:插件,loader,概念,webpack,output,path,js
From: https://www.cnblogs.com/goallin/p/17662085.html

相关文章

  • 网工学习(四)---IP地址相关概念
    子网掩码参考网址-https://blog.csdn.net/pagnzong/article/details/112737814不能单独存在,必须结合IP地址一起使用作用:划分子网,将某个IP地址划分为网络地址和主机地址两部分通俗理解:就是小区,就是电话区号,用来标识网络位表示方法-二进制 -11111111111111......
  • Maven plugin中的lifecycle、phase、goal、mojo概念及作用的理解
       首先,说些题外话,maven的plugin真的很容易写,很多时候,我们只是被plugin这个词吓倒了,总以为插件这玩意,是专家才能写的,我maven都没精通,怎么写得出自己的plugin呢,其实不然,起码在maven中,写一个自己的plugin还是非常简单的,其它软件的插件,要看情况,有些的确是要天才级人物才写得出,......
  • 树和二叉树的基本概念
    树和二叉树的基本概念树的定义树是一个递归的定义了,也就是说树中一个结点和其孩子结点都可以看成一个树.树有多种表示方式但是我们通常使用第一种递归的定义来表示树结构.树的基本术语根结点:非空树中没有前驱结点的结点.结点的度:结点拥有的子树数,也就是该结点向下直接......
  • 一、基本概念和基本类型
    基本概念和基本类型编程语言的分类(概念)1.编译型语言:产生一个额外的文件,电脑能够识别的内容,运行是直接运行编译后的额外的文件。2.解释型语言:不会产生额外的文件,并且运行时翻译,运行时从上到下一行翻译一行。变量(语法)变量的定义:他是一个可变的量(它的值可以发生改变)变量的作用:保存值(......
  • Android入门教程 | Fragment 基础概念
    什么是Fragment?Fragment,直译为“碎片”,“片段”。Fragment表示FragmentActivity中的行为或界面的一部分。可以在一个Activity中组合多个片段,从而构建多窗格界面,并在多个Activity中重复使用某个片段。可以将片段视为Activity的模块化组成部分,它具有自己的生命周期,能接收自......
  • 深入了解Webpack:特性、特点和结合JS混淆加密的实例
    Webpack是现代前端开发中最受欢迎的构建工具之一,其强大的特性和灵活性使得开发者能够更有效地管理和优化项目资源。在本文中,我们将深入探讨Webpack的特性和特点,并结合实例演示如何使用Webpack与JS混淆加密相结合。Webpack的特性和特点1.模块化管理Webpack支持将项目拆分为多个模块......
  • webpack 起步
    Webpack起步webpack用于编译JavaScript模块。一旦完成安装,你就可以通过webpackCLI或API与其配合交互。如果你还不熟悉webpack,请阅读核心概念和对比,了解为什么要使用webpack,而不是社区中的其他工具。基本安装首先我们创建一个目录,初始化npm,然后在本地安装webp......
  • Java中的泛型概念
    在Java中,泛型是一种强类型检查机制,它允许我们在编译时期指定类、接口或方法的参数和返回值类型。使用泛型可以实现代码的重用性、类型安全性和提高代码的可读性。下面是关于Java泛型的一些重要概念和用法:泛型类(GenericClass):通过在类名后面使用尖括号<T>来声明一个泛型类,在类......
  • 第八章 IJTAG概念
    1IJTAG的概念1.1背景介绍       JTAG框架基本目标:实现芯片间互联线的测试扩展功能:实现芯片内各种IP的调试通过TDR(数据寄存器)操纵和观测IP通过指令集激活某一个IP的TDRJTAG缺点片上IP数量导致JTAG指令集的增加片上IP数量导致指令解码器变得非常复......
  • 使用Webpack进行模块化开发与打包
    1.什么是WebpackWebpack是一个现代化的JavaScript模块打包工具,它可以将多个模块打包成一个或多个静态资源文件。通过Webpack,我们可以将项目中的各个模块进行模块化开发,并将它们打包成一个或多个可供浏览器加载的静态资源文件。2.Webpack的优势使用Webpack进行模块化开发与打包......