默认情况下,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 版本。
打包 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_modules 为 true,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_modules为true且源文件匹配已配置的rules之一时,支持「部分打包」,因为 Wrangler 会将其视为「外部」模块,不会尝试将其打包到入口点文件中。
process.env.NODE_ENV 在构建时静态替换为以下值之一:
| 上下文 | 值 |
|---|---|
wrangler dev |
"development" |
wrangler deploy 或 wrangler 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 devNODE_ENV=staging yarn wrangler devNODE_ENV=staging pnpm wrangler devWrangler 遵循 package.json 中的条件 exports 字段 ↗。这允许开发者实现同构库,根据运行时的 JavaScript 环境使用不同的实现。打包时,Wrangler 会尝试加载 workerd 键 ↗。请参阅 Wrangler 仓库中的同构包示例 ↗。
如果你的构建工具已经生成适合直接部署到 Cloudflare 的构建产物,你可以使用 --no-bundle 命令行标志选择退出打包:npx wrangler deploy --no-bundle。如果选择退出打包,Wrangler 将不会处理你的代码,Wrangler 打包引入的某些功能(例如压缩和 polyfill 注入)将不可用。
使用自定义构建自定义在使用 wrangler dev 和 wrangler deploy 时 Wrangler 将打包并上传到 Cloudflare 全球网络的内容。
某些框架工具或自定义预构建过程会生成修改后的 Wrangler 配置,用于部署 Worker 代码。 Wrangler 可以自动使用此生成的配置,而不是用户的原始配置。
有关更多信息,请参阅生成的 Wrangler 配置。