@basenative / wrangler-preset
一次别针,每个项目一起移动。
一个固定的 牧马人 Version加上一个小的,无依赖的片段生成器 wrangler.toml。旨在保持每个DuganLabs的repo (basenative, duganlabs, greenput, pendingbusiness, ralph-station, t4bs, warren-sys, warrendugan) 同时在同一牧马人身上。
为什么存在这个
在整个组织中,项目的牧马人版本从 ^3.114 来 ^4.85。漂移原因:
- 不一致
compatibility_date语义。 - 不同的默认值
nodejs_compat和朋友们。 - 每个回购重新决定如何连接D1 / KV / R2。
- 牧马人升级的痛苦持续了数周。
这个包固定了一个Wrangler版本,公开了一组推荐的标志,并附带了一个小的、有类型的构建器,因此每个repo中的配置看起来都是一样的。
安装
pnpm add @basenative/wrangler-preset
# wrangler is pulled in transitively at the version this preset pins.
你不再需要一个直接 wrangler 在你的回购依赖。使用 bn-wrangler (或 pnpm exec bn-wrangler),你总是会得到固定的版本。
命令行界面
# 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
编程API
defaults
推荐的基线。将其扩展到你的配置中:
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?)
每个返回一个小片段对象,你可以 mergeWrangler(...) 到一个配置:
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)
深度合并标量 (稍后获胜) 并连接表数组 (d1_databases, kv_namespaces, r2_buckets, durable_objects.bindings)。
toToml(config)
零依赖TOML序列化器覆盖了Wrangler使用的子集:标量、标量的数组、表和表的数组。
从模板生成
cp node_modules/@basenative/wrangler-preset/templates/wrangler.toml.tmpl wrangler.toml
# then edit __PROJECT_NAME__ etc.
采用检查表(每个回购)
- 移除任何直接
wrangler来自回购的deppackage.json. pnpm add @basenative/wrangler-preset.- 取代直接
wrangler ...在脚本中调用bn-wrangler .... - 集
compatibility_date从defaults.compatibility_date(或复制模板)。 - 通过升级此软件包将所有人聚集在一起: 每个季度一个PR,而不是八个。
链接
- 碱性单氧- https://github.com/DuganLabs/basenative
- 问题- - - - - - https://github.com/DuganLabs/basenative/issues
- 文档- https://github.com/DuganLabs/basenative#readme
许可证
apache - 2.0