← Cloudflare Workers / workers / wrangler
Bundling
По умолчанию Wrangler объединяет код Worker в бандл с помощью esbuild ↗. Это означает, что Wrangler имеет встроенную поддержку импорта модулей из npm ↗ заданный в вашем package.json. Чтобы просмотреть точный код, который Wrangler загрузит в Cloudflare, выполните npx wrangler deploy --dry-run --outdir dist, который покажет код вашего Worker после сборки Wrangler.
esbuild версия
Wrangler использует esbuild. Мы периодически обновляем esbuild версия, включенная в Wrangler, и поскольку esbuild ещё не достиг версии 1.0.0, поэтому изменения в работе сборки (bundling) иногда могут ломать обратную совместимость. В частности, мы можем повысить esbuild версию в минорной версии Wrangler.
В том числе модули, отличные от JavaScript
Bundling кода Worker объединяет несколько модулей в один файл. Иногда у вас могут быть модули, которые нельзя включить напрямую в бандл. Например, вместо того чтобы включать файл Wasm в JavaScript Worker, стоит загрузить файл Wasm как отдельный модуль, который можно импортировать во время выполнения. Wrangler поддерживает это по умолчанию для следующих типов файлов:
| Расширение модуля | Импортированный тип |
|---|---|
.txt |
string |
.html |
string |
.sql |
string |
.bin |
ArrayBuffer |
.wasm, .wasm?module |
WebAssembly.Module |
См. Конфигурация Bundling чтобы настроить эти типы файлов.
Например, при следующем импорте, 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 будет считать его "external" и не станет пытаться включить его в файл точки входа.
NODE_ENV
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 заменяется во время сборки, поэтому код только для разработки можно удалить из продакшен-сборки.
Значение по умолчанию можно переопределить, задав NODE_ENV переменную окружения при выполнении команды:
NODE_ENV=staging npx wrangler devУсловные exports
Wrangler учитывает условный exports поле ↗ в package.json. Это позволяет разработчикам реализовывать изоморфные библиотеки с разными реализациями в зависимости от среды выполнения JavaScript, в которой они работают. При сборке Wrangler попытается загрузить workerd ключ ↗. См. репозиторий Wrangler для пример изоморфного пакета ↗.
Отключить упаковку
Если ваши инструменты сборки уже создают артефакты, пригодные для прямого развёртывания в Cloudflare, вы можете отказаться от бандлинга с помощью --no-bundle флаг командной строки: npx wrangler deploy --no-bundle. Если вы откажетесь от сборки (bundling), Wrangler не будет обрабатывать ваш код, и некоторые возможности, которые даёт сборка Wrangler (например, минификация и внедрение полифиллов), будут недоступны.
Используйте Пользовательские сборки чтобы настроить, что именно Wrangler будет собирать и загружать в глобальную сеть Cloudflare при использовании wrangler dev и wrangler deploy.
Сгенерированная конфигурация Wrangler
Некоторые инструменты фреймворков или пользовательские процессы предварительной сборки создают изменённую конфигурацию Wrangler, которая затем используется для развёртывания кода Worker. Wrangler может автоматически использовать эту сгенерированную конфигурацию вместо исходной конфигурации пользователя.
См. Сгенерированная конфигурация Wrangler, где это описано подробнее.