Preserving bpack.hasExports on reset() #892
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I went digging to figure out what was causing #887 and found that the
hasExports
setting forbrowser-pack
is externally managed by browserify under various conditions, including theb.require()
method.Using watchify, you call
.bundle()
again onupdate
which internally calls.reset()
to recreate the pipeline, which creates a newthis._bpack
instance.Because
hasExports
is not set inthis._options
, thehasExternal
setting never makes it back into the new_bpack
instance, meaning subsequent bundles behave differently.I've fixed it by remembering the setting immediately before the pipeline is recreated, and immediately afterwards reapplying the previous value.
I considered adding it to the
opts
provided tothis._createPipeline
but didn't want to introduce any side effects, the implementation I went with is more consistent with the waythis._bpack.hasExports
is set in all the other cases, so it will now have exactly the same behaviour initially and after any pipeline reset.