@basenative/wrangler-preset

中文文档
3.0.0发布于 2026/10/31Apache-2.0TypeScriptES Module构建来源已验证

Pinned Wrangler version + typed wrangler.toml fragment generator. Pin once, every project moves together.

原始使用文档
文档目录12 节
  1. Why this exists
  2. Install
  3. CLI
  4. Programmatic API
  5. defaults
  6. bindings.d1(name, dbName, dbId) / kv(name, id) / r2(name, b…
  7. mergeWrangler(base, ...frags)
  8. toToml(config)
  9. Generate from the template
  10. Adoption checklist (per repo)
  11. Links
  12. License

@basenative/wrangler-preset

Pin once, every project moves together.

A pinned Wrangler version plus a small, dependency-free fragment generator for wrangler.toml. Designed to keep every DuganLabs repo (basenative, duganlabs, greenput, pendingbusiness, ralph-station, t4bs, warren-sys, warrendugan) on the same Wrangler at the same time.

Why this exists

Across the org, projects had Wrangler versions ranging from ^3.114 to ^4.85. Drift caused:

  • Inconsistent compatibility_date semantics.
  • Different defaults for nodejs_compat and friends.
  • Each repo re-deciding how to wire D1 / KV / R2.
  • Wrangler upgrade pain spread out over weeks.

This package pins one Wrangler version, exposes one set of recommended flags, and ships a tiny, typed builder so configs look the same in every repo.

Install

pnpm add @basenative/wrangler-preset
# wrangler is pulled in transitively at the version this preset pins.

You no longer need a direct wrangler dependency in your repo. Use bn-wrangler (or pnpm exec bn-wrangler) and you'll always get the pinned version.

CLI

# Pinned wrangler — pass through any wrangler args:
bn-wrangler --version
bn-wrangler pages dev dist
bn-wrangler deploy
bn-wrangler d1 migrations apply DB --remote

# Preset diagnostics:
bn-wrangler --bn-version
bn-wrangler --bn-help

Programmatic API

defaults

Recommended baseline. Spread it into your config:

import { defaults, mergeWrangler, toToml } from '@basenative/wrangler-preset';

const config = mergeWrangler(
  { name: 'my-app', main: 'src/index.js' },
  defaults,
);

console.log(toToml(config));

bindings.d1(name, dbName, dbId) / kv(name, id) / r2(name, bucket) / do(name, className, scriptName?)

Each returns a small fragment object you can mergeWrangler(...) into a config:

import { defaults, bindings, mergeWrangler, toToml } from '@basenative/wrangler-preset';

const cfg = mergeWrangler(
  { name: 'my-app', main: 'src/index.js' },
  defaults,
  bindings.d1('DB', 'my-app-db', '<uuid>'),
  bindings.kv('CACHE', '<kv-id>'),
  bindings.r2('ASSETS', 'my-app-assets'),
  bindings.do('ROOM', 'Room'),
);

await fs.writeFile('wrangler.toml', toToml(cfg));

mergeWrangler(base, ...frags)

Deep-merges scalars (later wins) and concatenates array-of-tables (d1_databases, kv_namespaces, r2_buckets, durable_objects.bindings).

toToml(config)

Zero-dependency TOML serializer covering the subset Wrangler uses: scalars, arrays of scalars, tables, and arrays of tables.

Generate from the template

cp node_modules/@basenative/wrangler-preset/templates/wrangler.toml.tmpl wrangler.toml
# then edit __PROJECT_NAME__ etc.

Adoption checklist (per repo)

  1. Remove any direct wrangler dep from the repo's package.json.
  2. pnpm add @basenative/wrangler-preset.
  3. Replace direct wrangler ... calls in scripts with bn-wrangler ....
  4. Set compatibility_date from defaults.compatibility_date (or copy the template).
  5. Bump everyone together by upgrading this package: one PR per quarter, not eight.

License

Apache-2.0

版本与发布记录

@basenative/wrangler-preset 共发布 11 个版本,首次发布于 2026/10/18;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.0latest2026/10/312 天前
2.4.02026/10/268 天前
2.3.22026/10/2212 天前
2.3.12026/10/2212 天前
2.3.02026/10/2212 天前
2.2.02026/10/2113 天前

关于 @basenative/wrangler-preset 的常见问题

@basenative/wrangler-preset 是什么?

固定牧马人版本键入牧马人.Pin一次,每个项目一起移动。

如何安装 @basenative/wrangler-preset?

在项目目录运行 npm install @basenative/wrangler-preset,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 bn-wrangler,可以用 npx bn-wrangler 直接运行。

@basenative/wrangler-preset 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@basenative/wrangler-preset 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@basenative/wrangler-preset 可以商用吗?

@basenative/wrangler-preset 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@basenative/wrangler-preset 还在维护吗?

最新版本 3.0.0 发布于 2026/10/31(2 天前);至今共发布 11 个版本,其中过去 12 个月发布了 11 个;首次发布于 2026/10/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。