build: ERR_REQUIRE_CYCLE_MODULE when loading oxc-parser in StackBlitz / WebContainer
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- node.js, typescript, wasm
- Ambito
- backend, build-system
Direzione di ricerca
Start by reading the optionalDependencies in the @angular/build package manifest and compare them with the package's Oxc integration. Check how the proposed WASI binding dependency is resolved by oxc-parser in WebContainer. The issue is done when a clean install makes the binding available up front and Angular builds in WebContainer without the runtime download failure.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Command
build, serve
Is this a regression?
Yes, this behavior used to work in the previous version
Description
In StackBlitz (WebContainer), running an Angular application with @angular/build fails during ng serve / ng build with:
(node:12) ExperimentalWarning: WASI is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
[oxc-parser] Downloading @oxc-parser/[email protected] on WebContainer...
Error [ERR_REQUIRE_CYCLE_MODULE]: Cannot require() ES Module /home/projects/stackblitz-starters-ki4mfjac/node_modules/oxc-parser/src-js/index.js in a cycle. (from /home/projects/stackblitz-starters-ki4mfjac/node_modules/@angular/build/src/tools/oxc/oxc-transform.js) A cycle involving require(esm) is not allowed to maintain invariants mandated by the ECMAScript specification. Try making at least part of the dependency in the graph lazily loaded.
at ModuleLoader.importSyncForRequire (node:internal/modules/esm/loader:169:3960)
at loadESMFromCJS (node:internal/modules/cjs/loader:160:19002)
at Module._compile (node:internal/modules/cjs/loader:160:19068)
at Module._extensions..js (node:internal/modules/cjs/loader:160:20043)
at Module.load (node:internal/modules/cjs/loader:160:17661)
at Module._load (node:internal/modules/cjs/loader:160:15179)
at wrapModuleLoad (node:internal/modules/cjs/loader:160:4199)
at Module.require (node:internal/modules/cjs/loader:160:17842)
at require2 (node:internal/modules/helpers:177:3126) {
code: 'ERR_REQUIRE_CYCLE_MODULE'
}
Parent issue: https://github.com/stackblitz/starters/issues/136
Analysis & Root Cause
-
No actual cyclic dependency in the code:
The module graph (oxc-transform.ts->oxc-parser,oxc-transform.ts->traversal.ts->oxc-parser) is an acyclic DAG.
TheERR_REQUIRE_CYCLE_MODULEerror is a known misleading error in Node.js's synchronousrequire(esm)loader (Node.js issues #55516 and #57172). When an ES module throws an error during synchronousrequire(esm)evaluation, Node's loader frequently shadows the real underlying exception and reports that the module was required in a cycle. -
WebContainer Fallback Failure:
- StackBlitz WebContainer cannot run native
.nodeaddons. oxc-parser'soptionalDependenciesonly list platform-specific native addons (@oxc-parser/binding-linux-x64-gnu, etc.) and do not list@oxc-parser/binding-wasm32-wasi. Consequently, package managers running in WebContainer never install the WASI binding.- At runtime,
oxc-parser/src-js/bindings.jsdetects WebContainer and falls back towebcontainer-fallback.cjs, which attempts to runchildProcess.execFileSync("pnpm", ["i", "@oxc-parser/binding-wasm32-wasi@..."], { cwd: "/tmp/..." }). - Running this synchronous subprocess from a worker thread inside WebContainer fails (or fails to initialize the multi-threaded WASI runtime), causing the synchronous
require(esm)evaluation ofoxc-parserto fail and surface asERR_REQUIRE_CYCLE_MODULE.
- StackBlitz WebContainer cannot run native
Proposed Solution (Option 4A: Add @oxc-parser/binding-wasm32-wasi to @angular/build optionalDependencies)
In oxc-parser/src-js/bindings.js, before falling back to webcontainer-fallback.cjs, it checks:
__napiWasiResolveCandidate('@oxc-parser/binding-wasm32-wasi', true, undefined)
If @oxc-parser/binding-wasm32-wasi is already present in node_modules, oxc-parser directly loads it and bypasses webcontainer-fallback.cjs and the dynamic pnpm i in /tmp entirely.
A viable solution (Option 4A) is to declare @oxc-parser/binding-wasm32-wasi in @angular/build's optionalDependencies (similar to how lmdb is declared).
This ensures that package managers install the WASI binding up-front alongside @angular/build, preventing the runtime dynamic installation and the resulting failure in WebContainer.
Minimal Reproduction
- Open https://stackblitz.com/edit/stackblitz-starters-ki4mfjac?file=package.json (or update any StackBlitz Angular starter to Angular CLI v22.2+).
- Run
npm install && npm start(orng serve). - Notice the build fails with
ERR_REQUIRE_CYCLE_MODULE: Cannot require() ES Module .../oxc-parser/src-js/index.js in a cycle.
Exception or Error
(node:12) ExperimentalWarning: WASI is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
[oxc-parser] Downloading @oxc-parser/[email protected] on WebContainer...
Error [ERR_REQUIRE_CYCLE_MODULE]: Cannot require() ES Module /home/projects/stackblitz-starters-ki4mfjac/node_modules/oxc-parser/src-js/index.js in a cycle. (from /home/projects/stackblitz-starters-ki4mfjac/node_modules/@angular/build/src/tools/oxc/oxc-transform.js) A cycle involving require(esm) is not allowed to maintain invariants mandated by the ECMAScript specification. Try making at least part of the dependency in the graph lazily loaded.
at ModuleLoader.importSyncForRequire (node:internal/modules/esm/loader:169:3960)
at loadESMFromCJS (node:internal/modules/cjs/loader:160:19002)
at Module._compile (node:internal/modules/cjs/loader:160:19068)
at Module._extensions..js (node:internal/modules/cjs/loader:160:20043)
at Module.load (node:internal/modules/cjs/loader:160:17661)
at Module._load (node:internal/modules/cjs/loader:160:15179)
at wrapModuleLoad (node:internal/modules/cjs/loader:160:4199)
at Module.require (node:internal/modules/cjs/loader:160:17842)
at require2 (node:internal/modules/helpers:177:3126) {
code: 'ERR_REQUIRE_CYCLE_MODULE'
}
Node.js v22.22.3
Your Environment
Angular CLI: 22.2.3
Node: 22.22.3 (WebContainer)
OS: linux x64 (WebContainer)
Anything else relevant?
Parent issue: https://github.com/stackblitz/starters/issues/136
- Lingua principale
- TypeScript
- Stelle
- 27k
- Fork
- 11.8k
- Merge medio
- 1g 2h
- PR unite (30g)
- 241
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di angular/angular-cli
-
area: @angular/build gemini-triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
angular/angular-cli#33955 ·
I maintainer di solito rispondono entro 1 giorno
-
area: @angular/cli gemini-triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
angular/angular-cli#33055 · 1 commento · 3 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
`ng generate app-shell` and `ng generate module --route` produce broken imports when a component `type` is configuredForse già presa @MeAkib l’ha presa 6 giorni fa. Apertaarea: @schematics/angular
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
angular/angular-cli#34449 ·
I maintainer di solito rispondono entro 1 giorno
-
Tailwind CSS v4 classes in new or moved files are not picked up by ng serve until another rebuildForse già presa @MeAkib l’ha presa 7 giorni fa. Apertaarea: @angular/build
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
angular/angular-cli#34446 ·
I maintainer di solito rispondono entro 1 giorno
-
ng update: "Package '@angular/core' is not a dependency" in a bun workspace memberForse già presa @drakeo338 l’ha presa 7 giorni fa. Apertaarea: @angular/cli
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
angular/angular-cli#34402 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di angular/angular-cli
Issue simili
-
New icon: `filter-clear`Apertacalcite-ui-icons enhancement impact - p3 - not time sensitive needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
Esri/calcite-design-system#15467 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
diegosouzapw/OmniRoute#18390 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 86/100
guilhermerodz/input-otp#157 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
davidjerleke/embla-carousel#1414 ·
I maintainer di solito rispondono entro 4 giorni