chore: ignore package-lock.json, and record why
Work happens on both Windows and Linux, so a committed lockfile would do harm rather than good here: - Every dependency in package.json is pinned exactly (no ^ or ~), so a lockfile has no floating ranges to guard. A plain `npm install` resolves identically without it. - The lock records platform-specific optional binaries for whichever OS built it (@rollup/rollup-linux-x64-gnu vs -win32-x64-msvc, for instance). Committed from one platform it is wrong on the other, and `npm ci` refuses rather than adapting, since reproducing the recorded tree exactly is its entire purpose. That is a strict mechanism pointed at the wrong target: it would break installs across machines while guaranteeing versions that were already exact. Cloning is rare here, so the reproducibility upside is small and the cross-platform cost is immediate. Both .gitignore and README now state the reasoning, including when to revisit (a dependency loosened to a range, or transitive drift exact pinning cannot control). Silently ignoring it would have invited the same question again. Verified: `git check-ignore -v package-lock.json` matches, and a regenerated lockfile leaves `git status` clean.
This commit is contained in:
+11
@@ -36,7 +36,18 @@ node_modules
|
|||||||
dist
|
dist
|
||||||
out
|
out
|
||||||
.env
|
.env
|
||||||
|
|
||||||
# Python (helper scripts)
|
# Python (helper scripts)
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
.venv/
|
.venv/
|
||||||
|
|
||||||
|
# Package lock — deliberately NOT tracked.
|
||||||
|
# Every dependency in package.json is pinned to an exact version (no ^ or ~), so
|
||||||
|
# a lockfile has no floating ranges to guard against. What it would add instead is
|
||||||
|
# trouble across machines: the lock captures the resolved tree including
|
||||||
|
# platform-specific optional binaries (e.g. @rollup/rollup-linux-x64-gnu), so a
|
||||||
|
# Linux-generated lock is wrong on Windows and vice versa, and `npm ci` refuses
|
||||||
|
# outright when the lock and manifest disagree. Revisit this if a dependency is
|
||||||
|
# ever loosened to a range or picks up meaningful transitive drift.
|
||||||
|
package-lock.json
|
||||||
|
|||||||
@@ -55,10 +55,30 @@ song branches are a rehearsal for that end state, not a requirement.
|
|||||||
|
|
||||||
- Binary input assets (audio, images, fonts, material video clips)
|
- Binary input assets (audio, images, fonts, material video clips)
|
||||||
- Video output (`out/`, rendered files)
|
- Video output (`out/`, rendered files)
|
||||||
|
- `package-lock.json` — see below
|
||||||
|
|
||||||
For untracked input assets, a **bill of materials** listing everything and explaining
|
For untracked input assets, a **bill of materials** listing everything and explaining
|
||||||
what each file is will be mandatory. Keep it as `BOM.md` alongside your song assets.
|
what each file is will be mandatory. Keep it as `BOM.md` alongside your song assets.
|
||||||
|
|
||||||
|
### Why there is no `package-lock.json`
|
||||||
|
|
||||||
|
Deliberate, not an oversight. Work happens on both Windows and Linux, and two
|
||||||
|
things make a lockfile a liability here rather than a safeguard:
|
||||||
|
|
||||||
|
1. **There is nothing for it to pin.** Every dependency in `package.json` is
|
||||||
|
pinned to an exact version — no `^`, no `~`. A plain `npm install` on any
|
||||||
|
machine resolves to the same versions the lockfile would have recorded.
|
||||||
|
2. **A lockfile is platform-specific.** It records the resolved tree, including
|
||||||
|
the optional native binaries for whichever OS generated it (`@rollup/rollup-linux-x64-gnu`,
|
||||||
|
`@rollup/rollup-win32-x64-msvc`). Committed from Linux it is wrong on Windows,
|
||||||
|
and `npm ci` refuses outright rather than adapting, since its whole purpose is
|
||||||
|
to reproduce the recorded tree exactly.
|
||||||
|
|
||||||
|
So it would be strict about the wrong thing: breaking installs across machines
|
||||||
|
while guarding versions that were never floating. Revisit this if a dependency is
|
||||||
|
ever loosened to a range, or picks up transitive drift that exact pinning cannot
|
||||||
|
control — at that point the lockfile earns its friction.
|
||||||
|
|
||||||
### Branching
|
### Branching
|
||||||
|
|
||||||
- `master` — minimal template (protected once locked in)
|
- `master` — minimal template (protected once locked in)
|
||||||
|
|||||||
Reference in New Issue
Block a user