-
Notifications
You must be signed in to change notification settings - Fork 444
Open
Labels
type: bugcode to address defects in shipped codecode to address defects in shipped code
Description
Describe the bug
Expected behavior
According to the Netlify CLI documentation for netlify deploy:
--no-buildDo not run build command before deploying. Only use this if you have no need for a build or your project has already been built.
When running:
netlify build
successfully bundles Edge Functions and places artifacts (.netlify/edge-functions/or similar)netlify deploy --no-build
should only upload already-built assets + already-bundled Edge Functions without re-running any bundling
Observed behavior
Even with --no-build, the CLI still runs the Edge Functions bundler:
⠋ Bundling edge functions...
✘ [ERROR] Could not resolve "[REDACTED]"
[REDACTED]:
1 │ import * as mod from "[REDACTED]";
╵ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The module "./dist/index.js" was not found on the file system:
[REDACTED]:
11 │ "default": "./dist/index.js"
╵ ~~~~~~~~~~~~~~~~~
You can mark the path "[REDACTED]" as external to exclude it from the bundle, which will remove this error and leave the unresolved path in the bundle.
This fails because:
- The bundler is looking for source files and/or workspace-internal
dist/artifacts that were produced during the earliernetlify build/ monorepo build step. - Those files are not present (or not visible) in the clean GitLab CI job for the deploy stage.
- This forces us to either:
- Artifact-upload all internal
dist/folders from every workspace/package used by Edge Functions
This is very messy & results in large artifacts - Or give up on separating build & deploy and run full build again in the deploy job (loses the separation benefit)
- Artifact-upload all internal
Why this matters (business / DX impact)
- In monorepos with many packages, bundling internal
dist/folders into artifacts just to satisfy the Edge Functions bundler is inefficient and error-prone. - It defeats one of the main advertised benefits of
--no-build: clean separation of build & deploy for faster / more predictable CI, especially on large repos. - Regular (non-edge) Functions appear to respect
--no-buildmuch better (pre-zipped bundles are reused).
Steps to reproduce
- Create a new monorepo where you add a separate Edge Function in a package
- Include the Edge Function within the application
- Run
netlify build - Remove the
distfolder of the Edge Function package - Run
netlify deploy - See that it can't find the necessary files to create the Edge Function bundle
Configuration
[build]
publish = "dist" # or wherever your publish dir is
command = "turbo run build" # or similar monorepo build command
[[edge_functions]]
path = "/*"
function = "my-function"Environment
System:
OS: macOS 15.7.3
CPU: (12) arm64 Apple M4 Pro
Memory: 196.92 MB / 24.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.22.0 - /Users/pvanmeijgaard/.local/state/fnm_multishells/11669_1770277129243/bin/node
npm: 10.9.4 - /Users/pvanmeijgaard/.local/state/fnm_multishells/11669_1770277129243/bin/npm
pnpm: 10.28.1 - /Users/pvanmeijgaard/.local/state/fnm_multishells/11669_1770277129243/bin/pnpm
bun: 1.3.7 - /opt/homebrew/bin/bun
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
type: bugcode to address defects in shipped codecode to address defects in shipped code