← Cloudflare Workers / workers / wrangler / migration
Переход с Wrangler v3 на v4
Wrangler v4 представляет собой крупный релиз, посвящённый обновлению базовых систем и зависимостей, а также улучшениям, которые делают команды Wrangler более последовательными и понятными. В отличие от предыдущих крупных версий Wrangler, которые были фундаментальные переработки ↗ и перестраивает архитектуру ↗ : четвёртая версия Wrangler включает гораздо меньше изменений. Если вы уже используете Wrangler, ваш рабочий процесс почти наверняка не изменится.
Большинству пользователей обновление не потребует никаких действий, но в следующих разделах описаны более существенные изменения и шаги по миграции там, где это необходимо.
Перейдите на Wrangler v4
Чтобы обновиться до последней версии Wrangler v4 в проекте Worker, выполните:
npm i -D wrangler@4После обновления вы можете проверить установку:
npx wrangler --versionСводка изменений
-
Обновлённая политика поддержки Node.js: Node.js v16, срок поддержки которого истёк в 2022 году, больше не поддерживается в Wrangler v4. Теперь Wrangler ориентируется на официальный жизненный цикл поддержки ↗.
-
Обновлённая версия esbuild: Wrangler использует esbuild ↗ чтобы собирать код Worker перед развёртыванием, и ранее была зафиксирована на esbuild v0.17.19. Wrangler v4 использует esbuild v0.24, что может повлиять на динамические wildcard-импорты. В дальнейшем Wrangler будет периодически обновлять
esbuildверсия, включенная в Wrangler, и посколькуesbuildещё не достиг версии 1.0.0, поэтому изменения в работе сборки (bundling) иногда могут ломать обратную совместимость. В частности, мы можем повыситьesbuildверсию в минорной версии Wrangler. -
По умолчанию команды работают в локальном режиме: Все команды, которые могут выполняться в локальном или удалённом режиме, теперь по умолчанию используют локальный режим и требуют
--remoteфлаг для запросов к API. -
Устаревшие команды и конфигурации удалены: Устаревшие команды, флаги и конфигурации удалены.
Подробные изменения
Обновлённая политика поддержки Node.js
Теперь Wrangler поддерживает только версии Node.js, соответствующие официальный жизненный цикл Node.js ↗:
- Поддерживается: Current, Active LTS, Maintenance LTS
- Больше не поддерживается: Node.js v16 (EOL в 2022 году)
Тесты Wrangler больше не запускаются на v16, поэтому пользователи, всё ещё использующие эту версию, могут столкнуться с неподдерживаемым поведением. Чтобы продолжить получать поддержку и совместимость с Wrangler, обновите Node.js v16 до поддерживаемой версии.
Затрагивает ли это меня?
Выполните следующую команду, чтобы проверить версию Node.js:
node --versionВам нужно принять меры, если ваша версия начинается с v16 или v18 (например, v16.20.0 или v18.20.0).
Обновление Node.js, см. Системные требования Wrangler. Cloudflare рекомендует использовать последнюю LTS версию Node.js.
Обновлённая версия esbuild
Wrangler v4 обновляет esbuild с v0.17.19 к v0.24, что принесло улучшения (например, возможность использовать using ключевого слова с RPC) и изменения в поведении сборки:
- Динамический импорт: Импорты с подстановочными знаками (wildcard imports), например,
import('./data/' + kind + '.json')) теперь автоматически включают все подходящие файлы в сборку.
У пользователей, которые полагаются на динамические импорты с подстановочными знаками, в сборку могут попасть нежелательные файлы. До esbuild v0.19 import инструкции с динамическими путями (например, import('./data/' + kind + '.json')) не включал в сборку все файлы, соответствующие glob-шаблону (*.json). Только файлы, явно указанные или включённые с помощью find_additional_modules были объединены в сборку. Начиная с esbuild v0.19 импорты с подстановочными знаками автоматически включают в сборку все файлы, соответствующие glob шаблону. Это может привести к попаданию в сборку лишних файлов, поэтому вместо динамических импортов с подстановочными знаками рекомендуется использовать явные импорты.
По умолчанию команды работают в локальном режиме
Теперь все команды выполняются в локальный режим по умолчанию. Wrangler имеет много команд для доступа к ресурсам, таким как KV и R2, но раньше эти команды вели себя непоследовательно в том, что касается локального или удалённого окружения выполнения. Например, D1 по умолчанию обращался к локальному хранилищу данных и требовал --remote флаг для запроса через API. KV же раньше по умолчанию запрашивал данные через API, неявно используя флаг --remote флаг) и требовал --local флаг для запроса локального хранилища данных. Чтобы поведение было единообразным во всех командах Wrangler, теперь каждая команда использует --local флаг по умолчанию и требует явного --remote флаг для запроса через API.
Например:
- Предыдущее поведение (Wrangler v3):
wrangler kv key getпо умолчанию запрашиваются удаленно. - Новое поведение (Wrangler v4):
wrangler kv key getзапросы локально, если только--remoteуказан.
Те, кто использует wrangler kv key и/или wrangler r2 object команды для чтения или записи в своё хранилище данных, потребуется добавить --remote флаг, чтобы воспроизвести прежнее поведение.
Затрагивает ли это меня?
Проверьте, используете ли вы какие-либо из этих команд в скриптах, CI/CD-пайплайнах или ручных процессах:
Команды KV:
wrangler kv key getwrangler kv key putwrangler kv key deletewrangler kv key listwrangler kv bulk putwrangler kv bulk delete
Команды R2:
wrangler r2 object getwrangler r2 object putwrangler r2 object delete
Вам нужно принять меры, если:
- Вы запускаете эти команды, ожидая, что они будут работать с удалёнными/продакшен данными.
- У вас есть скрипты или CI/CD пайплайны, которые используют эти команды без
--localили--remoteфлаг.
Проверьте кодовую базу и конфигурации CI/CD:
grep -rE "wrangler (kv|r2)" --include="*.sh" --include="*.yml" --include="*.yaml" --include="Makefile" --include="package.json" .Что делать:
Добавить --remote к командам, которые должны взаимодействовать с вашей учётной записью Cloudflare:
# Before (Wrangler v3 - queried remote by default)
wrangler kv key get --binding MY_KV "my-key"
# After (Wrangler v4 - must specify --remote)
wrangler kv key get --binding MY_KV "my-key" --remoteУстаревшие команды и конфигурации удалены
Все ранее устаревшие функции в Wrangler v2 и в Wrangler v3 теперь удалены. Кроме того, также удалены следующие функции, которые были признаны устаревшими в релизе Wrangler v3:
- Устаревшие статические ресурсы (с использованием
wrangler dev/deploy --legacy-assetsилиlegacy_assetsсвойство файла конфигурации). Вместо этого мы рекомендуем переход на Workers Static Assets. - Устаревшая совместимость с Node.js (с использованием
wrangler dev/deploy --node-compatилиnode_compatсвойство файла конфигурации). Вместо этого используйтеnodejs_compatфлаг совместимости. Сюда входит функциональность из устаревшегоnode_compatполифиллы и нативно реализованные Node.js API. wrangler version. Вместо этого используйтеwrangler --versionчтобы проверить текущую версию Wrangler.getBindingsProxy()(черезimport { getBindingsProxy } from "wrangler"). Вместо этого используйтеgetPlatformProxy()API, который принимает точно такие же аргументы.usage_model. Это больше не имеет эффекта после развертывание Workers Standard Pricing ↗.
Затрагивает ли это меня?
Проверьте конфигурационный файл Wrangler (wrangler.toml, wrangler.json, или wrangler.jsonc) для устаревших настроек:
# For TOML files
grep -E "(legacy_assets|node_compat|usage_model)\s*=" wrangler.toml
# For JSON files
grep -E "\"(legacy_assets|node_compat|usage_model)\"" wrangler.json wrangler.jsoncПроверьте свои команды и скрипты для устаревших флагов:
grep -rE "wrangler.*(--legacy-assets|--node-compat)" --include="*.sh" --include="*.yml" --include="*.yaml" --include="Makefile" --include="package.json" .Проверка использования устаревших API в вашем коде:
grep -rE "getBindingsProxy" --include="*.js" --include="*.ts" --include="*.mjs" .Вам нужно принять меры, если вы обнаружите что-либо из перечисленного:
| Устарело | Замена |
|---|---|
legacy_assets конфигурацию или --legacy-assets флаг |
Переход на Workers Static Assets |
node_compat конфигурацию или --node-compat флаг |
Используйте nodejs_compat флаг совместимости |
usage_model конфигурация |
Удалите этот параметр (он больше не действует) |
wrangler version команда |
Используйте wrangler --version |
getBindingsProxy() импорт |
Используйте getPlatformProxy() (те же аргументы) |
wrangler publish команда |
Используйте wrangler deploy |
wrangler generate команда |
Используйте npm create cloudflare@latest |
wrangler pages publish команда |
Используйте wrangler pages deploy |