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 详情
默认为 ""
发射器
(单位:千美元)标签,强制: 仅内部使用
链接 工作空间 root
(单位:千美元)布尔: 将工作空间根链接到 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 规则的额外命名参数