Skip to content

Bundling

By default, Wrangler bundles your Worker code using esbuild ↗. This means that Wrangler has built-in support for importing modules from npm ↗ defined in your package.json. To review the exact code that Wrangler will upload to Cloudflare, run npx wrangler deploy --dry-run --outdir dist, which will show your Worker code after Wrangler’s bundling.

Files which will not be bundled

Bundling your Worker code takes multiple modules and bundles them into one. Sometimes, you might have modules that should not be inlined directly into the bundle. For example, instead of bundling a Wasm file into your JavaScript Worker, you would want to upload the Wasm file as a separate module that can be imported at runtime. Wrangler supports this for the following file types:

  • .txt
  • .html
  • .bin
  • .wasm and .wasm?module

Refer to Bundling configuration to customize these file types.

For example, with the following import, the variable data will be a string containing the contents of example.html:

import data from "./example.html"; // Where `example.html` is a file in your local directory

This is also the basis of Wasm support with Wrangler. To use a Wasm module in a Worker developed with Wrangler, add the following to your Worker:

import wasm from "./example.wasm"; // Where `example.wasm` is a file in your local directory
const instance = await WebAssembly.instantiate(wasm); // Instantiate Wasm modules in global scope, not within the fetch() handler
export default {
fetch(request) {
const result = instance.exports.exported_func();
},
};

Conditional exports

Wrangler respects the conditional exports field ↗ in package.json. This allows developers to implement isomorphic libraries that have different implementations depending on the JavaScript runtime they are running in. When bundling, Wrangler will try to load the workerd key ↗. Refer to the Wrangler repository for an example isomorphic package ↗.

Disable bundling

If your build tooling already produces build artifacts suitable for direct deployment to Cloudflare, you can opt out of bundling by using the --no-bundle command line flag: npx wrangler deploy --no-bundle. If you opt out of bundling, Wrangler will not process your code and some features introduced by Wrangler bundling (for example minification, and polyfills injection) will not be available.

Use Custom Builds to customize what Wrangler will bundle and upload to the Cloudflare global network when you use wrangler dev and wrangler deploy.