New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clear scope cache before crawling to fix scope hoisting classes #2986
Conversation
# Conflicts: # packages/shared/scope-hoisting/src/hoist.js
@@ -51,6 +52,7 @@ function hasSideEffects(asset, {sideEffects} = asset._package) { | |||
module.exports = { | |||
Program: { | |||
enter(path, asset) { | |||
traverse.cache.clearScope(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this have (performance) side effects for every import of @babel/traverse
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possibly, but it’s the only way. I believe Babel’s behavior may actually be correct. I don’t think scope.crawl
was meant to be called manually. It is called automatically by Babel when setting up a scope for a path, and only re-crawls that scope, not child scopes. So we need to clear the cache so that Babel will automatically crawl child scopes again when we traverse them.
Ideally we wouldn’t need to re-crawl at all, but some Babel plugins are badly behaved and don’t update the scope properly when they mutate the AST.
…e/strip-type-module-attr * 'master' of github.com:parcel-bundler/parcel: Update deps & gitattributes (parcel-bundler#3006) Fix assigning to exports from inside a function in scope hoisting (parcel-bundler#2994) Define __esModule interop flag when requiring ES module from CommonJS (parcel-bundler#2993) Replace module.require in scope hoisting (parcel-bundler#2875) Clear scope cache before crawling (parcel-bundler#2986) Fix CI (parcel-bundler#2990) Shake exports with pure property assignments (parcel-bundler#2979) Update postcss.js (parcel-bundler#2922) Fail immediately if yarn.lock updates are needed (parcel-bundler#2945) # Conflicts: # packages/core/parcel-bundler/package.json # yarn.lock
…e/strip-type-module-attr * 'master' of github.com:parcel-bundler/parcel: fix source maps on coffeescript assets (parcel-bundler#3423) Fixes parcel-bundler#3133 by upgrading serialize-to-js from 1.1.1 to 3.0.0 (parcel-bundler#3451) Fix up misleading usage information (parcel-bundler#3158) bump chokidar to get a reload fix for linux (parcel-bundler#2878) Use uppercase for the first letter of the issue template (parcel-bundler#3192) Update dotenv-expand to allow overriding of falsy values (parcel-bundler#2971) Fixes 3076: HMR update breaks in webworker due to window (and location.reload) not existing in web worker context. (parcel-bundler#3078) Scope hoisting destructuring (parcel-bundler#2742) Create FUNDING.yml (parcel-bundler#3074) Added new info command (parcel-bundler#3068) Fix typo (parcel-bundler#3043) Update deps & gitattributes (parcel-bundler#3006) Fix assigning to exports from inside a function in scope hoisting (parcel-bundler#2994) Define __esModule interop flag when requiring ES module from CommonJS (parcel-bundler#2993) Replace module.require in scope hoisting (parcel-bundler#2875) Clear scope cache before crawling (parcel-bundler#2986) Fix CI (parcel-bundler#2990) Shake exports with pure property assignments (parcel-bundler#2979) Update postcss.js (parcel-bundler#2922) Fail immediately if yarn.lock updates are needed (parcel-bundler#2945)
Fixes #2981.
This works around a babel issue where re-crawling the scope doesn't update all references.