browserify / browserify/factor-bundle

Dedupe regression with browserify v8

Open
#51 19 comments 4 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
397
Forks
24
PR merge metrics
No merged PRs in 30d

Description

I'm logging the issue here, but the error is due to changes in browserify 8.0.0.

This might be best explained with an example:
- Module `A` depends on module `B`
- Other modules depend on module `B'`, which is identical to `B` but a separate copy exists for whatever reason
- `B` is deduped by browserify and points to `B'`
- `B` gets routed to the `A` bundle, assigned ID of `200`
- `B'` gets routed to the common bundle, assigned ID of `100`
- Page includes common bundle then `A` bundle

`A` bundle in browserify v7:

``` js
200:[function(require,module,exports){
module.exports=require(100)
},{"dup":100}]}
```

`A` bundle in browserify v8:

``` js
200:[function(require,module,exports){
arguments[4][100][0].apply(exports,arguments)
},{"dup":100}]}
```

This results in an exception `Uncaught TypeError: Cannot read property '0' of undefined` because ID `100` is not defined in the current bundle.

This worked in v7 because it used `require`, which tries to resolve the module with previously defined `require`s from other bundles.

I realize this is an edge case and that if `npm` is correctly deduping dependencies, this situation should not occur. And the v8 behaviour is more correct in theory because `B` may have different dependencies from `B'`. However, assuming that any module is defined in the current bundle is dangerous when factor-bundle is involved.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.