nodejs_npm --build-in-source silently produces a dependency-less artifact for an npm workspaces monorepo
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- nodejs, python
- Área
- build-system, devtools
Línea de trabajo
Start with NodejsNpmBuilder and NodejsNpmWorkflow._actions_for_linking_source_dependencies_to_artifacts, then inspect LinkSinglePathAction.execute. Reproduce the npm workspaces build_in_source example and check how the missing packages/fn/node_modules path is handled. Done means hoisted dependencies reach the artifact or the build emits a visible warning instead of succeeding silently.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
For an npm workspaces monorepo built with --build-in-source, the NodejsNpmBuilder workflow (the plain one, not NodejsNpmEsbuildBuilder) produces an artifact with no dependencies at all, and reports success.
npm hoists the workspace package's dependencies to the monorepo root, so packages/<fn>/node_modules is never created. NodejsNpmWorkflow._actions_for_linking_source_dependencies_to_artifacts then links source_dir/node_modules into the artifacts directory, and LinkSinglePathAction.execute treats a missing source as nothing to do:
if not source_path.exists():
# Source path doesn't exist, nothing to symlink
LOG.debug("Source path %s does not exist, skipping generating symlink", source_path)
return
The result is a Lambda package that fails at invoke time with Cannot find module, with only a debug-level log at build time.
Steps to reproduce
An npm workspaces monorepo, one function per workspace package:
package.json { "workspaces": ["packages/*"] }
package-lock.json
packages/fn/package.json { "dependencies": { "minimal-request-promise": "^1.3.0" } }
packages/fn/included.js require("minimal-request-promise")
Build packages/fn in source:
LambdaBuilder(language="nodejs", dependency_manager="npm", application_framework=None).build(
source_dir, # <monorepo>/packages/fn
artifacts_dir,
scratch_dir,
os.path.join(source_dir, "package.json"),
runtime="nodejs22.x",
build_in_source=True,
)
Observed result
artifacts dir: ['included.js', 'package.json']
artifacts/node_modules: ABSENT
source packages/fn/node_modules: None <- npm hoisted, nothing to link
monorepo root node_modules: ['.package-lock.json', '@workspaces-monorepo', 'minimal-request-promise']
require.resolve from artifacts dir: UNRESOLVABLE
The build exits successfully.
Expected result
Either the hoisted dependencies reach the artifact, or the build says out loud that it could not find any — a warning rather than a debug log, so the failure surfaces at build time instead of at invoke time.
NodejsNpmEsbuildBuilder is unaffected: esbuild bundles the dependency into the output file, resolving it through the root node_modules.
Additional environment details
- aws-lambda-builders
develop(measured at 587257c) and unchanged by #931 - npm 11.19.0, node 22, Linux; the hoisting behaviour is the same on npm 8/9/10
Raised out of review on #931, which changes which npm command installs those dependencies but not where npm puts them, so the gap predates it and is not made worse by it. Filing it so the workspaces coverage added there does not imply the plain workflow's artifact is covered.
- Lenguaje dominante
- Python
- Estrellas
- 381
- Forks
- 162
- Merge medio
- 1 d 1 h
- PR fusionados (30 d)
- 2
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de aws/aws-lambda-builders
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
aws/aws-lambda-builders#925 · 1 reacción ·
Los mantenedores suelen responder en 2 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 64/100
aws/aws-lambda-builders#924 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 2 días
-
Bug: PythonUvBuilder fails to build app with dependencies on editable installs in the workspaceAbiertostage/needs-triage
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
aws/aws-lambda-builders#892 ·
Los mantenedores suelen responder en 2 días
-
stage/needs-triage type/feature
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
aws/aws-lambda-builders#839 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 2 días
-
area/build contributors/good-first-issue contributors/welcome type/feature
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
aws/aws-lambda-builders#831 · 3 comentarios ·
Los mantenedores suelen responder en 2 días
Todos los issues de aws/aws-lambda-builders
Issues similares
-
[Bug] @deck.gl/arcgis dist import resolves to unpublished @deck.gl/core source path (9.3.11, 9.4.0)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
workflow: a tick's dispatch counts as 'only this step', and no review self-grants a round unattendedAbiertoworkflow
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
kristofdegrave/homeassistant-smart-charging#1505 ·
Los mantenedores suelen responder en 1 día
-
New Submission: TropWATERAbiertometadata submission
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Wrongly named dashboard variableAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
canonical/content-cache-operator#163 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[submission]Abiertosubmission
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
leanprover/lean-eval-submissions#1852 ·
Los mantenedores suelen responder en 1 día