Comments (2)
Thanks for the report. This is something that I already know about and am working on fixing. It's my top priority. Unfortunately fixing it isn't straightforward because it requires a change to how scopes work.
The problem is caused by variables that are defined in a nested scope and then used in a sibling or parent scope. I have surprisingly not run in to this on all of the code bases I've tested so far. I only discovered it because of the library mentioned in #24.
This came up because I have a somewhat different way of doing scope analysis. I'm trying to keep the number of full-tree passes required to a minimum for speed, so I'm attempting to set up scopes and bind variables in the same pass. That mostly works except for this case.
I've already tried to fix this by doing a bottom-up algorithm instead of the top-down algorithm I'm currently using. It mostly works except that I'm also doing some AST transforms during the same pass that need to know if a given identifier is a specific global or not, which is information that isn't available at that point when using the bottom-up algorithm.
I think it should work without a performance penalty if I move scope construction from the binding pass to the parsing pass. That's what I plan to try next.
from esbuild.
So here is more simpler example:
var a = function () {
var loop$1 = function () {
console.log(name$1);
};
for (var name$1 in {c: 'c', d: 'd'}) loop$1();
};
a();
translates to
var a = function() {
var loop$1 = function() {
console.log(name$1);
};
for (var name$12 in {
c: "c",
d: "d"
})
loop$1();
};
a();
which produces the same error:
Uncaught ReferenceError: name$1 is not defined at loop$1
The same code bundled with browserify
or just included without bundling produces no error.
from esbuild.
Related Issues (20)
- Build failing in Dockerfile but works on local Windows machine
- Broken automatic JSX transform HOT 7
- ERROR: Expected "*/" to terminate multi-line comment HOT 2
- Expected ";" but found "const" - typescript transformer HOT 2
- Option to disable injected comment of input path file HOT 2
- Additional directories to watch HOT 3
- esbuild does not fail with undefined functions HOT 5
- Segmentation fault when using with vite and sveltekit project HOT 1
- Glob imports must match exactly
- Pass argument to IIFE HOT 2
- Esbuild causing bundle breakage when applied twice to the same bundle
- Splitting results in `Dynamic require of "<filename>" is not supported` when targeting `chrome62`
- [Feature Request] Add built-in HTML loader HOT 1
- Imports from stdio entrypoint don't have a namespace set
- DCE is not removed when value is from a const in another module.
- Get metafile info from a `watch()` rebuild HOT 2
- removes the backslash "\" when minify option is false HOT 4
- [Sourcemap] Private properties don't get sourcemapped correctly HOT 3
- ENV Secrets accessible from js code in a React + Rails APP. HOT 7
- [Feature] Ability to save charts from Bundle Size Analyzer as svg files
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from esbuild.