Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Imports within try blocks are hoisted incorrectly

Offen
#639 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
javascript, nodejs, rollup
Bereich
build-system

Rechercherichtung

Führe zunächst die Reproduktionsbefehle mit microbundle v0.12.0 auf Node v12.17.0 aus, untersuche anschließend dist/bug-test.js und vergleiche die Platzierung des generierten require mit dem Quell-Snippet aus esm. Ermittle, ob das Hoisting in microbundle oder Rollup entsteht; abgeschlossen ist die Aufgabe, wenn require durch den try-Block geschützt bleibt und node dist/bug-test.js ohne Fehler beendet wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

upstream
Problem

Microbundle hoists a require() call out of a try {} block in a dependency. When that require() call throws, it is not caught by the try {} block anymore.

I'm not sure whether this is an issue with microbundle or rollup. A solution to this would be not to hoist require() calls if they are in a nested block or wrap them in a function to evaluate them lazily.

How to reproduce

Make sure you have yarn installed globally, then run following commands:

mkdir bug-test
cd bug-test
yarn add microbundle esm
echo "import 'esm'" > test.js
yarn microbundle test.js --format cjs --target node --external none
node dist/bug-test.js
Expected behaviour

Commands above should execute and exit without error code.

Actual behaviour

The node dist/bug-test.js command throws this error:

internal/modules/cjs/loader.js:969
  throw err;
  ^

Error: Cannot find module 'internal/bootstrap/loaders'
Require stack:
- /Users/dany/code/bug-test/dist/bug-test.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:966:15)
    at Function.Module._load (internal/modules/cjs/loader.js:842:27)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/dany/code/bug-test/dist/bug-test.js:7:31)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/Users/dany/code/bug-test/dist/bug-test.js' ]

The reason for this error is that there is this code in the esm module:

[…] function q(e){let t;try{const{internalBinding:n}=require("internal/bootstrap/loaders"),r=n("natives");x(r,e)&&(t=r[e])}catch(e){}return"string"==typeof t?t:""} […]

// Simplified:
try { require("internal/bootstrap/loaders") } catch (e) {}

which is modified to this by microbundle in dist/bug-test.js:

[…] var loaders = _interopDefault(require('internal/bootstrap/loaders')); […] function q(e){let t;try{const{internalBinding:n}=loaders,r=n("natives");x(r,e)&&(t=r[e]);}catch(e){}return "string"==typeof t?t:""} […]

// Simplified:
var loaders = require("internal/bootstrap/loaders")
try { loaders } catch (e) {}
Additional info

microbundle v0.12.0
Node v12.17.0
Mac OS 10.15.5
Related: https://github.com/nodejs/node/issues/33656

Vorherrschende Sprache
JavaScript
Sterne
8.1k
Forks
358
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus developit/microbundle

Alle Issues in developit/microbundle

Ähnliche Issues

Weitere Issues zu JavaScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.