@bepack/cli 0.1.0-beta.6 → 0.1.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,88 +18,46 @@
18
18
 
19
19
  [中文](./README.zh-CN.md) | English
20
20
 
21
- BePack is a build tool for Minecraft Bedrock add-ons. It keeps behavior-pack and resource-pack manifests, Script API dependencies, TypeScript builds, local copying, and `.mcpack` / `.mcaddon` releases in one workflow.
21
+ BePack keeps an add-on project in one workflow: pack manifests, Script API dependencies, TypeScript builds, copying into Minecraft, and `.mcpack` / `.mcaddon` releases.
22
22
 
23
- ## What you can do with it
23
+ ## Features
24
24
 
25
- - Create a BePack configuration from scratch or import it from existing manifests.
26
- - Keep `manifest.json` in sync without overwriting fields that BePack does not own.
27
- - Build a Behavior Pack's TypeScript Script API entry into its `scripts/` directory.
28
- - Type-check that source with `tsc --noEmit` before bundling — **on by default**.
29
- - Inject build-time feature flags with `compile.define` (identifier-level, typecheck-safe) or `replace` tokens.
30
- - Customize the Rolldown build with inline options, a function, or your own `rolldown.config.ts`.
31
- - Resolve supported `@minecraft/*` dependencies and write their concrete versions to your project.
32
- - Keep `manifest.json` in sync with a `preserve` (incremental) or `clean` (config-generated) merge strategy.
33
- - Copy packs into a Minecraft development folder and create release archives.
34
- - Inspect Bedrock `.cpuprofile` captures without counting idle tick gaps as CPU work.
25
+ - Create a config from scratch or import an existing BP/RP manifest.
26
+ - Keep `manifest.json` in sync without overwriting fields BePack does not own.
27
+ - Choose a `preserve` (incremental) or `clean` (config-generated) manifest merge.
28
+ - Type-check and bundle Script API TypeScript into the pack's `scripts/` folder.
29
+ - Inject build-time flags with `compile.define` or `replace` tokens.
30
+ - Resolve `@minecraft/*` dependencies and write concrete versions.
31
+ - Copy packs into a development folder and build release archives.
32
+ - Inspect Bedrock `.cpuprofile` captures, ignoring idle tick gaps.
35
33
 
36
34
  ## Requirements
37
35
 
38
36
  - Node.js 20 or later.
39
- - A Minecraft Bedrock behavior pack, resource pack, or both.
37
+ - A behavior pack, a resource pack, or both.
40
38
  - `package.json` when you use managed Script API dependencies.
41
39
 
42
- ## Create a new project
43
-
44
- For a new behavior-pack project, start with [create-mcbe](https://www.npmjs.com/package/create-mcbe):
40
+ ## Create a project
45
41
 
46
42
  ```bash
47
43
  npm create mcbe
48
44
  ```
49
45
 
50
- Use create-mcbe's documentation for its prompts and command-line options. You can install BePack globally:
51
-
52
- ```bash
53
- npm install -g @bepack/cli
54
- ```
55
-
56
- You can also install it locally with `npm install -D @bepack/cli`; in that case, use `npx bepack` or package scripts.
57
-
58
- If you need a fresh BePack configuration, generate one and then edit the generated values to match your project:
59
-
60
- ```bash
61
- bepack init
62
- ```
63
-
64
- The starter config contains a BP, a TypeScript entry at `src/main.ts`, and generated UUIDs. Run the first build with dependency installation:
46
+ [create-mcbe](https://www.npmjs.com/package/create-mcbe) scaffolds a project and documents its prompts. To set up BePack by hand:
65
47
 
66
48
  ```bash
67
- bepack build --install
49
+ npm install -D @bepack/cli
50
+ npx bepack init # fresh config
51
+ npx bepack init --from-bp bp/manifest.json # import a BP
52
+ npx bepack init --from-bp bp/manifest.json --from-rp rp/manifest.json
53
+ npx bepack build --install # first build
68
54
  ```
69
55
 
70
- ## Add BePack to an existing project
56
+ `--from-bp` / `--from-rp` read names, UUIDs, versions, manifest format, and supported Script API dependencies from the manifests, and enable compilation only when a matching source file exists. Add `--dry-run` to preview and `--format js|mjs` for a JavaScript config. A global install (`npm i -g @bepack/cli`) drops the `npx`.
71
57
 
72
- When a project already has a pack manifest, import that manifest instead of re-entering UUIDs and versions by hand:
58
+ ## Configuration
73
59
 
74
- ```bash
75
- # Behavior pack only
76
- bepack init --from-bp bp/manifest.json
77
-
78
- # Behavior pack and resource pack
79
- bepack init --from-bp bp/manifest.json --from-rp rp/manifest.json
80
- ```
81
-
82
- This creates `bepack.config.ts` from the pack roots, names, UUIDs, versions, manifest format, and supported Script API dependencies it finds. A BP script module becomes a TypeScript build configuration only when a matching source file (`src/<entry>.ts`, `.mts`, `.js` or `.mjs`) actually exists — a pack whose scripts already live inside it keeps compilation disabled instead of generating an entry that would fail the first build. Missing `tsconfig.json` (when a TypeScript source exists) is reported and disables type checking in the generated config.
83
-
84
- `--dry-run` prints what would be created without writing anything.
85
-
86
- Useful variations:
87
-
88
- ```bash
89
- # Generate JavaScript or ESM JavaScript config instead of TypeScript
90
- bepack init --format js
91
- bepack init --format mjs
92
-
93
- # Run from outside the project directory
94
- bepack init --cwd path/to/project --from-bp bp/manifest.json
95
-
96
- # Replace an existing generated config deliberately
97
- bepack init --from-bp bp/manifest.json --force
98
- ```
99
-
100
- ## Minimal configuration
101
-
102
- BePack loads `bepack.config.ts`, `bepack.config.mjs`, or `bepack.config.js` from the project directory. This is a typical Script API behavior-pack setup:
60
+ BePack loads `bepack.config.ts`, `bepack.config.mjs`, or `bepack.config.js` from the project root:
103
61
 
104
62
  ```ts
105
63
  import { defineConfig } from "@bepack/cli";
@@ -130,11 +88,9 @@ export default defineConfig({
130
88
  });
131
89
  ```
132
90
 
133
- Generate new UUIDs for a new pack; do not reuse another add-on's UUIDs. For a data-only behavior pack, omit `moduleUuid` and `compile`. For a resource-pack-only project, configure `packs.rp` with its `root`, header `uuid`, and resources `moduleUuid` instead.
91
+ Generate new UUIDs for a new pack instead of reusing another add-on's. A data-only behavior pack omits `moduleUuid` and `compile`; a resource-pack-only project configures `packs.rp` with its `root`, header `uuid`, and resources `moduleUuid`.
134
92
 
135
- ## Recommended project layout
136
-
137
- The exact folder names are configurable. This layout matches the example above:
93
+ The folder names are configurable. The example above expects:
138
94
 
139
95
  ```text
140
96
  my-addon/
@@ -149,197 +105,115 @@ my-addon/
149
105
  └── dist/ # .mcpack / .mcaddon output
150
106
  ```
151
107
 
152
- When using a resource pack too, add an `rp/` directory and a `packs.rp` entry. BePack maintains the BP/RP manifest relationship when both packs are configured.
153
-
154
108
  ## Everyday workflow
155
109
 
156
110
  ```bash
157
- # Resolve configured Script API dependencies, update manifests, and build
158
- bepack build --install
159
-
160
- # Build once after dependencies are already installed
161
- bepack build
162
-
163
- # Watch files and rebuild during development
164
- bepack dev
165
-
166
- # Create a distributable archive (builds first)
167
- bepack pack
168
-
169
- # Build and package in one command
170
- bepack build --pack
111
+ bepack build --install # resolve dependencies, update manifests, build
112
+ bepack build # build with dependencies already installed
113
+ bepack dev # watch and rebuild
114
+ bepack pack # build, then create an archive
115
+ bepack build --pack # build and package in one command
171
116
  ```
172
117
 
173
- `bepack pack` builds first, so a bare `pack` can never ship stale `scripts/*.js` output; use `bepack pack --no-build` to zip the pack folders exactly as they are on disk.
174
-
175
- Use `bepack install` on its own when you only want to update managed dependencies and manifests. Set `target` in the config, or temporarily override it while installing and building:
118
+ `bepack pack` builds first so it cannot ship stale `scripts/*.js`; use `--no-build` to zip the pack folders as they are. Run `bepack install` alone to only refresh dependencies and manifests, and `--target` to override the Minecraft version for a single run:
176
119
 
177
120
  ```bash
178
121
  bepack install --target 1.21.120
179
- bepack build --install --target 1.21.120
180
122
  ```
181
123
 
182
- > **Type checking runs by default.** Every `bepack build` and `bepack dev` type-checks your source before Rolldown bundles it, using `tsc --noEmit` unless you pick another checker. A failing check stops the build with `TYPECHECK_FAILED` instead of emitting a broken pack. Skip it with `--skip-typecheck`, or set `packs.bp.compile.typecheck: false`. This is independent of any custom Rolldown options — adding them does **not** turn the type check off.
124
+ ## Type checking
183
125
 
184
- ### Choose your type checker
126
+ `bepack build` and `bepack dev` run `tsc --noEmit` before Rolldown and stop with `TYPECHECK_FAILED` instead of emitting a broken pack. Skip it with `--skip-typecheck` or `compile.typecheck: false`; custom Rolldown options do not disable it.
185
127
 
186
- TypeScript checkers keep getting faster, so the checker is just a command line you supply — there is no preset list to keep up with:
187
-
188
- ```ts
189
- export default defineConfig({
190
- packs: {
191
- bp: {
192
- compile: {
193
- entry: "src/main.ts",
194
- // Anything you can type in a terminal. Default: "tsc --noEmit".
195
- typecheckCommand: "bun check",
196
- // typecheckCommand: "tsc-rs --noEmit",
197
- // typecheckCommand: "npx tsc --noEmit",
198
- // Quote-aware; backslash only escapes a quote, so Windows paths
199
- // survive as written:
200
- // typecheckCommand: 'node "C:\\tools\\my checker.mjs"',
201
- },
202
- },
203
- },
204
- });
205
- ```
206
-
207
- The same thing as an object, or per command from the CLI:
128
+ The checker is any command line you supply:
208
129
 
209
130
  ```ts
210
131
  compile: {
211
- // the switch and the command in one place
212
- typecheck: { command: "bun check", args: ["--pretty"] },
132
+ entry: "src/main.ts",
133
+ typecheckCommand: "bun check", // default: "tsc --noEmit"
213
134
  }
214
135
  ```
215
136
 
216
137
  ```bash
217
- bepack build --typecheck-command "bun check"
218
- bepack dev --typecheck-command "tsc-rs --noEmit"
219
- bepack pack --typecheck-command "npx tsc --noEmit"
138
+ bepack build --typecheck-command "tsc-rs --noEmit"
220
139
  ```
221
140
 
222
- Common choices, and what BePack runs:
141
+ BePack adds `--project` and cache flags only to its own default; a custom command runs exactly as written. The object form (`typecheck: { command, args }`), precedence, and the deprecated `useNpx` settings are in [the reference guide](./reference.md).
223
142
 
224
- | You want | `typecheckCommand` |
225
- | --- | --- |
226
- | the default | *(leave it unset)* → `tsc --noEmit --project <tsconfig>` |
227
- | your project's TypeScript | `"npx tsc --noEmit"` |
228
- | Bun's fast checker | `"bun check"` (uses Bun's bundled TypeScript, not your pinned `typescript`) |
229
- | native TS port (Rust) | `"tsc-rs --noEmit"` |
230
- | Vue / Svelte | `"vue-tsc --noEmit"` / `"svelte-check"` |
143
+ ## Script API dependencies
231
144
 
232
- **Only the unset default (and deprecated `useNpx` compatibility settings) gets arguments added by BePack** (`--project <tsconfig>`, plus `--incremental`/`--tsBuildInfoFile` under `--cache`). Once you write a `command`, BePack adds nothing — spell out the tsconfig flag yourself if the tool needs one. `typecheck.args` is appended after your command.
145
+ Supported `@minecraft/*` entries accept `stable`, `beta`, `preview`, or an exact version. Online commands (`install`, `build --install`) resolve selectors to concrete versions and write them to `package.json` and the BP manifest; offline commands keep the manifest value, and an exact config version always wins.
233
146
 
234
- Precedence: CLI `--typecheck-command` > CLI `--use-npx` > `compile.typecheck.command` > `compile.typecheckCommand` > deprecated `compile.useNpx` > the `tsc` default. A CLI command replaces the configured `typecheckArgs` too, since args are usually command-specific. The deprecated `useNpx` settings keep the old behavior of passing the configured tsconfig and cache flags; writing `typecheckCommand: "npx tsc --noEmit"` is an explicit custom command and receives no automatic flags. Switching checkers does not disable checking — only `typecheck: false` or `--skip-typecheck` does.
147
+ ## Customize the build
235
148
 
236
- `stable`, `beta`, `preview`, and exact versions can be used for the supported `@minecraft/*` dependency entries. BePack resolves selectors such as `stable` to concrete package versions before updating `package.json` and the BP manifest.
237
-
238
- The version written to `manifest.json` comes from, in order: an exact version in your config (`"@minecraft/server": "2.10.0"` — always wins), the version resolved by `bepack install` / `build --install` (online), then the version already stored in the manifest (offline `build` / `dev` / `manifest` never touch the network). Every write is logged — `manifest @minecraft/server: 2.0.0 -> 2.10.0 (specifier "stable", install)` or `... kept from manifest ... — run \`bepack install\` to refresh` — so a stale channel version is never silent again.
239
-
240
- ## Customize the Rolldown build
241
-
242
- `packs.bp.compile` covers the common cases. When you need the rest of Rolldown (extra plugins, `resolve.alias`, `treeshake`, `sourcemap`, ...), pass your own options inline, through a function, or through a config file:
149
+ For Rolldown plugins, aliases, sourcemaps, and the rest, pass options inline (or as a function), or point at your own config file:
243
150
 
244
151
  ```ts
245
- export default defineConfig({
246
- // name, version, packs.bp.root, uuid, ... omitted
247
- packs: {
248
- bp: {
249
- compile: {
250
- entry: "src/main.ts",
251
- // Object form, or a function (options, context) => options
252
- rolldown: {
253
- resolve: { alias: { "@lib": "./src/lib" } },
254
- output: { sourcemap: true },
255
- },
256
- // Or a config file (relative to the project root):
257
- // rolldownConfig: "rolldown.bp.config.ts",
258
- },
259
- },
152
+ compile: {
153
+ entry: "src/main.ts",
154
+ rolldown: {
155
+ resolve: { alias: { "@lib": "./src/lib" } },
156
+ output: { sourcemap: true },
260
157
  },
261
- });
158
+ // rolldownConfig: "rolldown.bp.config.ts",
159
+ }
262
160
  ```
263
161
 
264
162
  ```bash
265
- # Temporarily replace the configured file
266
163
  bepack build --rolldown-config rolldown.staging.mjs
267
- bepack dev --rolldown-config rolldown.staging.mjs
268
164
  ```
269
165
 
270
- Your options are merged on top of the ones BePack generates: `plugins` are appended, `external` is unioned, and `transform` / `resolve` / `output` / `experimental` are merged one level deep. `input` and the output location fields stay under BePack's control and are rejected with `CONFIG_INVALID` if a customization tries to move them. Custom config files may be `.ts`, `.mts`, `.js`, or `.mjs` and must export a single configuration. See [the reference guide](./reference.md) for the full merge table and the list of protected fields.
271
-
272
- ## Run in Minecraft during development
166
+ Your options are merged on top of BePack's: plugins are appended, `external` is unioned, and `resolve` / `output` / `transform` merge one level deep. `input` and the output location stay under BePack's control. See the reference guide for the full merge table.
273
167
 
274
- Configure a copy target once, then add `--copy` to `dev` or `build`:
168
+ ## Run in Minecraft
275
169
 
276
170
  ```ts
277
- export default defineConfig({
278
- // name, version, and packs omitted
279
- copy: {
280
- defaultTarget: "minecraft",
281
- targets: {
282
- minecraft: {
283
- type: "gameRoot",
284
- path: "C:/Users/you/AppData/Local/Packages/Microsoft.MinecraftUWP_8wekyb3d8bbwe/LocalState/games/com.mojang",
285
- },
171
+ copy: {
172
+ defaultTarget: "minecraft",
173
+ targets: {
174
+ minecraft: {
175
+ type: "gameRoot",
176
+ path: "C:/Users/you/AppData/Local/Packages/Microsoft.MinecraftUWP_8wekyb3d8bbwe/LocalState/games/com.mojang",
286
177
  },
287
178
  },
288
- dev: {
289
- copy: true,
290
- },
291
- });
179
+ },
180
+ dev: { copy: true },
292
181
  ```
293
182
 
294
183
  ```bash
295
- # Initial build, then rebuild and copy whenever a watched file changes
296
- bepack dev
297
-
298
- # Or copy a completed build once
299
- bepack build --copy
184
+ bepack dev # build, then rebuild and copy on change
185
+ bepack build --copy # copy a finished build once
300
186
  bepack copy --target minecraft
301
187
  ```
302
188
 
303
- `gameRoot` writes behavior packs to `development_behavior_packs` and resource packs to `development_resource_packs`. You can also use a custom target when your BP and RP need separate destination paths. See the reference guide for the full target syntax.
189
+ `gameRoot` writes behavior packs to `development_behavior_packs` and resource packs to `development_resource_packs`. Custom targets and include rules are covered in the reference guide.
304
190
 
305
- ## Inspect Bedrock CPU profiles
191
+ ## Inspect CPU profiles
306
192
 
307
- `/script profiler stop` writes a standard V8 `.cpuprofile`, but Bedrock does not sample idle time. The gap between ticks arrives as a large `timeDeltas` value on the first sample of the next tick, so treating deltas as CPU time makes `tick` look like the hottest function. `bepack profile` treats deltas above `--gap` (default `5` ms) as idle gaps, then adds each remaining sample's own delta to the functions it hit, so rows are ranked by real accumulated time instead of sample count.
193
+ Bedrock does not sample idle time, so the tick gap arrives as a large `timeDeltas` value on the next sample. `bepack profile` drops deltas above `--gap` (default `5` ms) and ranks functions by real accumulated time:
308
194
 
309
195
  ```bash
310
- # Overview, with bursts sorted by busy time
311
196
  bepack profile summary bedrock.cpuprofile
312
-
313
- # Spikes in time order, including intervals and top stacks
314
- bepack profile bursts bedrock.cpuprofile
315
-
316
- # Self or inclusive functions inside a time window
317
- bepack profile top bedrock.cpuprofile --from 2900 --to 2950 --by total
318
-
319
- # Compare two captures; falls back to whole active samples if one side has no burst
320
- bepack profile diff before.cpuprofile after.cpuprofile
197
+ bepack profile bursts bedrock.cpuprofile
198
+ bepack profile top bedrock.cpuprofile --from 2900 --to 2950 --by total
199
+ bepack profile diff before.cpuprofile after.cpuprofile
321
200
  ```
322
201
 
323
- Use `--json` for machine-readable output and `--root <dir>` to shorten source paths. A burst needs at least `--min-samples` active samples (default `20`). The command does not require a `bepack.config` file.
202
+ Use `--json` for machine-readable output and `--root <dir>` to shorten paths. No `bepack.config` is required.
324
203
 
325
204
  ## Package releases
326
205
 
327
- Set an output name and directory with `pack`. `{name}` and `{version}` are replaced from the top-level config:
328
-
329
206
  ```ts
330
- export default defineConfig({
331
- // name: "my-addon", version: "1.0.0", packs: ...
332
- pack: {
333
- name: "{name}-{version}",
334
- outDir: "releases",
335
- },
336
- });
207
+ pack: {
208
+ name: "{name}-{version}",
209
+ outDir: "releases",
210
+ }
337
211
  ```
338
212
 
339
213
  ```bash
340
214
  bepack pack
341
215
  bepack pack --name my-addon-preview
342
- bepack pack --no-build # zip the pack folders as-is, without building first
216
+ bepack pack --no-build
343
217
  ```
344
218
 
345
219
  | Configured packs | Output |
@@ -348,11 +222,11 @@ bepack pack --no-build # zip the pack folders as-is, without building first
348
222
  | RP only | `.mcpack` |
349
223
  | BP and RP | `.mcaddon` |
350
224
 
351
- When a pack is packed selectively (always for BP, and for RP once `packs.rp.include` is set), BePack lists the top-level entries the include list leaves out and tells you to add them to `packs.bp.include` / `packs.rp.include` — files such as a `README_中文.md` next to `manifest.json` are no longer dropped silently.
225
+ When the include list leaves files out, BePack lists them and points at `packs.bp.include` / `packs.rp.include` instead of dropping them silently.
352
226
 
353
227
  ### Pack optimization (`__brarchive`)
354
228
 
355
- Bedrock 1.26.40 introduced Mojang's **pack optimizer**, which stores a pack's loose files in `__brarchive/` archives. BePack can produce the same layout:
229
+ Bedrock 1.26.40+ can read a pack's loose files from `__brarchive/` archives, the same layout Mojang ships. Turn it on for packaging:
356
230
 
357
231
  ```ts
358
232
  pack: { outDir: "dist", optimize: true }
@@ -360,40 +234,31 @@ pack: { outDir: "dist", optimize: true }
360
234
 
361
235
  ```bash
362
236
  bepack pack --optimize # --no-optimize turns it back off
363
- bepack build --pack --optimize
364
237
  ```
365
238
 
366
- BePack writes `header.pack_optimization_version: "0.1.0"` into the packaged manifest — that field is what makes the engine read the archives (a game version such as `"1.26.40"` is ignored). Registry folders such as `entities/`, `items/`, `blocks/`, `recipes/` and `models/` are archived in full and their loose files dropped; path-addressed folders (`functions/`, `loot_tables/`, `structures/`, `texts/`, `textures/`, `sounds/`, `font/`, `materials/`) keep their real files and get a name-only stub entry in the archive, exactly like Mojang's own packs. Verified in-game with an embedded `@minecraft/server` probe: archived blocks/items/entities/recipes register, and functions/loot tables resolve from the loose files.
367
-
368
- Your pack folder on disk is never modified, and `bepack copy` only optimizes when you ask it to.
239
+ BePack writes `header.pack_optimization_version: "0.1.0"` (the field that enables archives), archives registry folders such as `entities/` and `items/`, and keeps path-addressed files such as `functions/` and `textures/` loose with name stubs. Pack folders on disk are never modified.
369
240
 
370
- > **Compatibility:** only clients that understand `__brarchive/` (1.26.40+) see the archived content; older clients only see the folders that were kept loose. `min_engine_version` does not gate any of this, so BePack just warns when it is below 1.26.40 (`allowUnsupportedTarget: true` silences it). See the reference guide for every option.
371
-
372
- Copies to a development folder stay loose by default. Turn on `copy.optimize` (or pass `--optimize` to `copy` / `dev` / `build --copy`) to put the **optimized** shape into the dev folder, so you can catch archive-only problems in-game before shipping:
373
-
374
- ```ts
375
- copy: { defaultTarget: "minecraft", optimize: true }
376
- ```
241
+ > Only 1.26.40+ clients see archived content; older clients see just the loose files. `copy.optimize` gives the dev folder the same shape.
377
242
 
378
243
  ## Commands at a glance
379
244
 
380
- | Command | Purpose |
381
- | ------------------------- | -------------------------------------------------------------------------------- |
382
- | `bepack init` | Create a config, or import one with `--from-bp` / `--from-rp`. |
383
- | `bepack install` | Resolve managed dependencies and update `package.json` and manifests. |
384
- | `bepack manifest` | Update manifests without running dependency installation. |
385
- | `bepack build` | Patch manifests, type-check with `tsc`, then compile the configured BP source. |
386
- | `bepack dev` | Build once, then watch and rebuild (type checking on by default). |
387
- | `bepack copy` | Copy configured packs to a development target. |
388
- | `bepack pack` | Build, then create a `.mcpack` or `.mcaddon` (`--no-build` to skip). |
389
- | `bepack profile summary` | Inspect Bedrock `.cpuprofile` captures and locate slow ticks. |
390
- | `bepack config --summary` | Inspect the resolved configuration. |
245
+ | Command | Purpose |
246
+ | ------------------------- | -------------------------------------------------------------------- |
247
+ | `bepack init` | Create a config, or import one with `--from-bp` / `--from-rp`. |
248
+ | `bepack install` | Resolve managed dependencies and update `package.json` and manifests. |
249
+ | `bepack manifest` | Update manifests without running dependency installation. |
250
+ | `bepack build` | Patch manifests, type-check, then compile the configured BP source. |
251
+ | `bepack dev` | Build once, then watch and rebuild. |
252
+ | `bepack copy` | Copy configured packs to a development target. |
253
+ | `bepack pack` | Build, then create a `.mcpack` or `.mcaddon` (`--no-build` to skip). |
254
+ | `bepack profile summary` | Inspect `.cpuprofile` captures and locate slow ticks. |
255
+ | `bepack config --summary` | Inspect the resolved configuration. |
391
256
 
392
- All project commands accept `--cwd <project-dir>` and `--config <path>` when the current directory or config filename is different. Add `--dry-run` to preview file-writing commands, or `--json` for machine-readable output. `bepack profile` accepts `--cwd` and `--root` but does not load a config. Run `bepack <command> --help` for every command option.
257
+ All project commands accept `--cwd <dir>`, `--config <path>`, `--dry-run`, and `--json`. `bepack <command> --help` lists every option.
393
258
 
394
- ## More documentation
259
+ ## Documentation
395
260
 
396
- This README covers the common path: create or import a project, configure packs, build, copy, and package. For complete configuration fields, custom copy targets, inclusion rules, dependency-resolution extensions, plugins, hooks, and replacement tokens, read [the reference guide](./reference.md).
261
+ For complete configuration fields, custom copy targets, inclusion rules, dependency resolvers, plugins, hooks, and replacement tokens, read [the reference guide](./reference.md).
397
262
 
398
263
  ## License
399
264