@bazel/esbuild

中文文档
5.8.1发布于 2023/02/17Apache-2.0零依赖近 30 天下载 5.9万

bazel 的规则构建

中文使用文档
文档目录6 节
  1. 安装
  2. 概览
  3. 兴建
  4. 配置 构建 工具链
  5. 正在构建 配置
  6. 新建仓库

bazel 的规则构建

建筑规则运行 兴建 巴泽尔的捆绑工具. esbuild是一个极快的 JavaScript 捆绑器,用 Go 所写的,它的 当前基准 显示它可以更快的320x 其他捆绑

安装

添加数据 @bazel/esbuild npm 包给您的 devDependencies 内 package.json。 。 。 .

npm install --save-dev @bazel/esbuild

或使用线条

yarn add -D @bazel/esbuild

Esbuild 二进制自动为您的平台取出,并通过 Bazel 工具链被曝光 . 要做到这一点,请添加 esbuild_repositories 规则给您 WORKSPACE。 。 。 . 您需要将其指向 npm install 或 barrn install 创建的仓库 @bazel/esbuild 正在获取软件包。 (按惯例,这是 npm) (中文(简体) ). 设定 npm_repository 属性到该寄存器的名称.

npm_install(
    name = "npm",
    # @bazel/esbuild is a dependency in this package.json
    package_json = "//:package.json",
    package_lock_json = "//:package-lock.json",
)

load("@build_bazel_rules_nodejs//toolchains/esbuild:esbuild_repositories.bzl", "esbuild_repositories")

esbuild_repositories(npm_repository = "npm")

为避免急于获取所有 npm 依赖性, 此负载语句来自“ Built- in ” @build_bazel_rules_nodejs 而不是从 @npm。 。 。 . 在规则5.0中,我们打算通过获得整个建设支持来纠正这种层层违规现象 独立于 rules nodejs 分发, 不需要从 npm 安装任何软件包 .

参见 API 文件 esbuild_repositories 用于自定义 Bazel 如何下载 esbuild 软件包 从npm。 或者,高级用户可以通过定义 Esbuild 存储器来完全推翻下载 在您的 workSPACE 文件中 maybe 内部 esbuild_repositories 被跳过.

概览

这个 esbuild 规则可以取一个JS或TS依赖树并捆绑到一个单一文件上,或者分拆到多个文件,输出一个目录.

load("@npm//@bazel/esbuild:index.bzl", "esbuild")
load("@npm//@bazel/typescript:index.bzl", "ts_project")

ts_project(
    name = "lib",
    srcs = ["a.ts"],
)

esbuild(
    name = "bundle",
    entry_point = "a.ts",
    deps = [":lib"],
)

上面将创建三个输出文件, bundle.js, (中文(简体) ), bundle.js.map 财务报告和审定财务报表 bundle_metadata.json 它包含捆绑的元数据,用于协助调试和再吸收跟踪.

要创建代码分割捆绑, 设置 splitting = True 编辑 esbuild 规则.

load("@npm//@bazel/esbuild:index.bzl", "esbuild")
load("@npm//@bazel/typescript:index.bzl", "ts_project")

ts_project(
    name = "lib",
    srcs = ["a.ts"],
    deps = [
        "@npm//foo",
    ],
)

esbuild(
    name = "bundle",
    entry_point = "a.ts",
    deps = [":lib"],
    splitting = True,
)

这将创建一个输出目录, 包含所有代码分割块及其源图文件

兴建

用户

esbuild(name, args, args_json, config, define, define_settings, deps, entry_point, entry_points,
        external, format, launcher, link_workspace_root, max_threads, metafile, minify, output,
        output_css, output_dir, output_map, platform, sourcemap, sources_content, splitting, srcs,
        stamp, target)

在 Bazel 下运行自制捆绑器

关于建设的更多信息,参见: https://esbuilding.github.io/ 互联网档案馆的存檔,存档日期2013-12-22

捐款

名称

(单位:千美元)名称,强制:这个目标的独有名称.

参数

(单位:千美元)词典:字符串 - > 字符串: 包含在调用 Esbuild 中的额外参数的命令,其中键为参数名. 数值以$( location.) 扩展为准

默认为 {}

参数 json

(单位:千美元)字符串: 仅内部使用

默认为 ""

配置

(单位:千美元)标签: 用于 esbuild 的配置文件,来自 esbuild config 宏. 注意此文件中设置的选项可能会被覆盖 . 见 https://github.com/bazelbuilding/rules nodejs/tree/stable/packages/esbuilding/test/plugins/BUILD.bazel 互联网档案馆的存檔,存档日期2013-12-22 用于使用 esbuilding 配置和插件的例子。 此属性的依赖性必须提供: 未知的提供者

默认为 None

定义

(单位:千美元)词典:字符串 - > 字符串: 全球标识符替换指令. 数值取决于$(位置.)的扩展. 示例

esbuild(
    name = "bundle",
    define = {
        "process.env.NODE_ENV": "production"
    },
)

见 https://esbuilding.github.io/api/#定义 详情

默认为 {}

定义设置( s)

(单位:千美元)词典:标签 - > 字符串:Starlark的标签命令构建设置和标识符,以被其值所取代. 示例

load("@bazel_skylib//rules:common_settings.bzl", "string_flag")

string_flag(
    name = "api_endpoint",
    build_setting_default = "https://example.com/v1",
)

esbuild(
    name = "bundle",
    define_settings = {
        ":api_endpoint": "API_ENDPOINT",
    },
)

建筑环境必须提供 BuildSettingInfo。 。 。 . 该值会自动转换为JS文字. 见 https://docs.bazel.building/versions/main/skylark/config.html#预定义设定 更多关于Starlark构建设置的细节。 此属性的依赖性必须提供: 未知的提供者

默认为 {}

代码

(单位:千美元)标签列表: 构建捆绑所需的直接依赖关系列表

默认为 []

输入点( c)

(单位:千美元)标签:捆绑的切入点(例如:您的主.js或app.js或索引.js)

这是一条快捷键 entry_points 属性,带有单个条目. 指定此属性或 entry_point但不是两者皆有.

默认为 None

条目( 点)

(单位:千美元)标签列表:捆绑的切入点(例如:您的主.js或app.js或索引.js)

指定此属性或 entry_point但不是两者皆有.

默认为 []

外部

(单位:千美元)字符串列表: 模块名称清单,这些模块名称被作为外部处理,没有包括在产生的捆绑中

见 https://esbuilding.github.io/api/# 外语 详情

默认为 []

格式

(单位:千美元)字符串: 捆绑的输出格式, 当平台是浏览器时默认为iife 和Cjs当平台是节点。 如果执行代码分拆或多个条目 点被指定,默认为 Esm .

见 https://esbuilding.github.io/api/#format 互联网档案馆的存檔,存档日期2013-12-02 详情

默认为 ""

发射器

(单位:千美元)标签,强制: 仅内部使用

(单位:千美元)布尔: 将工作空间根链接到 bin dir 支持绝对要求, 如“ my wksp/ path/ to/ file ” . 如果需要源文件,则可以复制到bin dir并复制到 bin.

默认为 False

最大线条( t)

(单位:千美元)整数: 设置 GOMAXPROCS 变量以限制 esbuild 可以运行的线程数量. 如果同时实施许多建立规则的做法,这可能会造成经济放缓,那么这一点就是有益的. 对于一般用途,请不要设置此属性.

默认为 0

元文件

(单位:千美元)布尔: 如果为真, 将沿着输出创建元文件

默认为 True

缩小

(单位:千美元)布尔:将捆绑与所建的薄膜做成薄膜. 删除白空间,缩短标识符,并使用等同但较短的语法.

设置全部 -- 最小化- * 旗

见 https://esbuilding.github.io/api/#minify (英语) 详情

默认为 False

产出

(单位:千美元)标签: 捆绑时输出文件的名称

输出( c)

(单位:千美元)标签: 宣布一个.css文件将在输出捆绑旁边输出.

如果您的 JS 代码包含导入 . css 文件的导入语句, Esbuild 将放入 包含在主输出文件旁边的文件中,您需要声明。 如果输出 文件名为"foo.js",您应该设置为"foo.css".

输出 dir

(单位:千美元)布尔: 如果为真, Esbuilding 将生成包含所有输出文件的输出目录

默认为 False

输出( m)

(单位:千美元)标签: 捆绑时输出源地图的名称

平台

(单位:千美元)字符串:要捆绑的平台.

见 https://esbuilding.github.io/api/#平台 详情

默认为 "browser"

源图

(单位:千美元)字符串: 定义源图是输出的地方以及如何将它们包含在捆绑中. 默认情况下, 一个单独的 .js.map 文件由捆绑生成和引用。 如果“ 外部” , 一个单独的 .js.map 文件是生成的,但未被捆绑引用。 如果“ inline” , 将生成一个源图, 并将其内容内嵌到捆绑中( 而没有创建外部源图文件) 。 如果“ 两者” , 则内含源图和 a .js.map 文件创建.

见 https://esbuilding.github.io/api/# sourcemap 互联网档案馆的存檔,存档日期2013-12-02 详情

默认为 ""

来源( c)

(单位:千美元)布尔: 如果虚假, 省略 sourcesContent 字段来自生成的源地图

见 https://esbuilding.github.io/api/#出自-内容 详情

默认为 False

分割

(单位:千美元)布尔: 如果选中的话, Esbuild 将生成一个输出目录, 包含多个切入点的代码分割输出文件

见 https://esbuilding.github.io/api/#分享 财务报告和审定财务报表 https://esbuilding.github.io/api/#出入口点 详情

默认为 False

弧线

(单位:千美元)标签列表: 用于构建的源文件

默认为 []

邮票

(单位:千美元)标签: 是否将构建信息编码到输出中. 可能的数值 : - 说吧 @rules_nodejs//nodejs/stamp:always数字 : 总是将构建信息印入输出中,甚至在 [--nostamp [stamp] 构建中也是如此. 应当避免这种设置,因为它可能造成缓存错过远程缓存 任何下游行动 取决于它. - 说吧 @rules_nodejs//nodejs/stamp:never数字 : 总是用常数替换构建信息 。 这给了良好的建材结果缓冲. - 说吧 @rules_nodejs//nodejs/stamp:use_stamp_flag数字 : 嵌入建构信息由[---[无]标 [标]旗所控制. 被标记的二进制除非其依赖关系发生变化,否则不会被重建. [印 : https://docs.bazel.building/versions/main/user-manual.html#flag-stamp 页面存档备份,存于互联网档案馆 这个属性的依赖性必须提供: StampSettingInfo

默认为 @rules_nodejs//nodejs/stamp:use_stamp_flag

目标

(单位:千美元)字符串: 环境目标(如:es2017, chhrome58, firefox57, safari11,), 边缘16,节点10, Esnext. 默认 es2015.

见 https://esbuilding.github.io/api/#目标 详情

默认为 "es2015"

配置 构建 工具链

用户

configure_esbuild_toolchain(name, binary, exec_compatible_with)

鉴于二进制路径和平台限制, 定义构建工具链

摄影师

名称

用于此工具链的独有名称,一般为"esbuilt platform arch"的形式

二进制

新建二进制标签

执行 兼容 与

平台制约清单

正在构建 配置

用户

esbuild_config(name, config_file, srcs, deps, kwargs)

宏用于构建配置文件及其附属属性

摄影师

名称

此规则的独特名称

配置文件( f)

配置文件/ 输入点

弧线

配置引用的源文件列表

默认为 []

代码

此配置所需的依赖性列表

默认为 []

宽度

任何其他共同属性

新建仓库

用户

esbuild_repositories(npm_repository, name, npm_args, kwargs)

帮助获取和设置构建版本和工具链

使用 Bazel 的下载器( 通过 http_archive) 获取 esbuild 软件包 页:1 npm_install编号 :yarn_install 在你的工作舱. 要配置下载地点, 您会制作一个包含重写规则的文件, 如

rewrite (registry.nodejs.org)/(.*) artifactory.build.internal.net/artifactory/$1/$2

您可以在 Bazel 来源中找到一些关于重写图案的文件 : Url Rewriter Config.java (英语)

那就用那个 --experimental_downloader_config Bazel 选择指向您的文件 . 例如,如果您创建 .bazel_downloader_config 你可能会增加你的 .bazelrc 文件 :

common --experimental_downloader_config=.bazel_downloader_config

摄影师

npm 仓库

安装 @ bazel/ esbuild 软件包的仓库名称 由 npm install 或 纱线 install.

名称

目前未使用

默认为 ""

npm 参数

要传递到 npm 安装规则的额外参数

默认为 []

宽度

npm install 规则的额外命名参数

版本与发布记录

@bazel/esbuild 共发布 52 个版本,首次发布于 2021/02/13;过去 12 个月发布了 0 个版本。

版本发布日期距今
5.8.1latest2023/02/173 年前
5.7.32022/12/093 年前
5.7.22022/11/273 年前
5.7.12022/10/274 年前
5.7.02022/10/074 年前
5.6.02022/09/274 年前

其他发布通道:next → 5.0.0-rc.2,lts → 4.6.2。

关于 @bazel/esbuild 的常见问题

@bazel/esbuild 是什么?

bazel 的规则构建

如何安装 @bazel/esbuild?

在项目目录运行 npm install @bazel/esbuild,或使用 pnpm add / yarn add / bun add。

@bazel/esbuild 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bazel__esbuild 是否存在。

@bazel/esbuild 可以商用吗?

@bazel/esbuild 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bazel/esbuild 的下载量有多少?

根据 npm 官方下载统计,@bazel/esbuild 在 2026/10/08 – 2026/11/06 这 30 天内被下载 58,685 次,日均约 1,956 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bazel/esbuild 还在维护吗?

最新版本 5.8.1 发布于 2023/02/17(3 年前);至今共发布 52 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/02/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。