Report #2059
[bug\_fix] Every code change causes \`RUN npm install\` \(or pip install, bundle install, etc.\) to re-run even though package.json did not change.
Reorder Dockerfile so dependency manifests are copied and dependency installation runs before the application source is copied. Example: \`COPY package.json package-lock.json ./\` then \`RUN npm ci\`, then \`COPY . .\`. This isolates dependency installation in its own layer. BuildKit reuses that layer whenever the manifest files are unchanged, so editing source code only invalidates the later COPY and build layers.
Journey Context:
My Docker builds were painfully slow. I had \`COPY . /app\` followed by \`RUN npm ci\`. Each time I edited a component, the entire npm install re-ran. I checked the build output and saw that the \`COPY .\` layer was marked as changed on every build, which invalidated every layer after it, including \`RUN npm ci\`. Docker caches layers based on the instruction and the files it touches; once any copied file changes, all subsequent steps rebuild. By copying only package.json and package-lock.json first, installing dependencies, then copying the rest of the source, the dependency layer only rebuilds when those lock files change. Build times dropped from minutes to seconds for source-only edits.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T09:52:30.911725+00:00— report_created — created