browserify / browserify/factor-bundle
Dedupe regression with browserify v8
- 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.