跳转到内容
搜索文档

打包

最后更新 查看 MarkdownAgent 设置

默认情况下,Wrangler 使用 esbuild 打包 Worker 代码。这意味着 Wrangler 内置支持从 package.json 中定义的 npm 导入模块。要查看 Wrangler 将上传到 Cloudflare 的确切代码,请运行 npx wrangler deploy --dry-run --outdir dist,这将显示 Wrangler 打包后的 Worker 代码。

esbuild 版本

Wrangler 使用 esbuild。我们会定期更新 Wrangler 中包含的 esbuild 版本,由于 esbuild 是 1.0.0 之前的工具,这有时可能包括打包工作方式的破坏性变更。特别是,我们可能会在 Wrangler 次要版本中升级 esbuild 版本。

包含非 JavaScript 模块

打包 Worker 代码会将多个模块合并为一个文件。 有时,你可能拥有无法直接内联到 bundle 中的模块。 例如,与其将 Wasm 文件打包到 JavaScript Worker 中,不如将 Wasm 文件作为可在运行时导入的单独模块上传。 Wrangler 默认支持以下文件类型:

模块扩展 导入类型
.txt string
.html string
.sql string
.bin ArrayBuffer
.wasm, .wasm?module WebAssembly.Module

请参阅打包配置以自定义这些文件类型。

例如,使用以下导入时,text 将是包含 example.txt 内容的字符串:

import text from "./example.txt";

这也是导入 Wasm 的基础,如下例所示:

import wasm from "./example.wasm";

// Instantiate Wasm modules in the module scope
const instance = await WebAssembly.instantiate(wasm);

export default {
	fetch() {
		const result = instance.exports.exported_func();

		return new Response(result);
	},
};

查找其他模块

通过在配置文件中设置 find_additional_modulestrue,Wrangler 将遍历 base_dir 下的文件树。 任何与你定义的 rules 匹配的文件也将作为未打包的外部模块包含在部署的 Worker 中。

这种方法对于支持大型或动态导入 JavaScript 文件的懒加载很有用:

  • 通常,大型懒导入文件(例如 await import("./large-dep.mjs"))会直接打包到入口点中,降低懒加载的效果。 如果向 rules 添加了匹配规则,则此文件只会在运行时实际导入时才加载和执行。
  • 以前,基于变量的动态导入(例如 await import(`./lang/${language}.mjs`))在运行时总是失败,因为 Wrangler 无法知道应包含哪些模块。 提供匹配所有这些文件的规则,例如 { "type": "EsModule", "globs": ["./lang/**/*.mjs"], "fallthrough": true },将确保此模块在运行时可用。
  • find_additional_modulestrue 且源文件匹配已配置的 rules 之一时,支持「部分打包」,因为 Wrangler 会将其视为「外部」模块,不会尝试将其打包到入口点文件中。

NODE_ENV

process.env.NODE_ENV 在构建时静态替换为以下值之一:

上下文
wrangler dev "development"
wrangler deploywrangler build "production"

你可以使用 process.env.NODE_ENV 根据构建上下文有条件地运行代码:

if (process.env.NODE_ENV === "development") {
	console.log("Running in development mode");
}

由于 process.env.NODE_ENV 在构建时被替换,仅用于开发的代码可以从生产 bundle 中移除。

你可以在运行命令时通过设置 NODE_ENV 环境变量来覆盖默认值:

NODE_ENV=staging npx wrangler dev

条件导出

Wrangler 遵循 package.json 中的条件 exports 字段。这允许开发者实现同构库,根据运行时的 JavaScript 环境使用不同的实现。打包时,Wrangler 会尝试加载 workerd。请参阅 Wrangler 仓库中的同构包示例

禁用打包

如果你的构建工具已经生成适合直接部署到 Cloudflare 的构建产物,你可以使用 --no-bundle 命令行标志选择退出打包:npx wrangler deploy --no-bundle。如果选择退出打包,Wrangler 将不会处理你的代码,Wrangler 打包引入的某些功能(例如压缩和 polyfill 注入)将不可用。

使用自定义构建自定义在使用 wrangler devwrangler deploy 时 Wrangler 将打包并上传到 Cloudflare 全球网络的内容。

生成的 Wrangler 配置

某些框架工具或自定义预构建过程会生成修改后的 Wrangler 配置,用于部署 Worker 代码。 Wrangler 可以自动使用此生成的配置,而不是用户的原始配置。

有关更多信息,请参阅生成的 Wrangler 配置

这篇文档对您有帮助吗?