Factor-bundle and browserify-shim don't play well together
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 25/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- javascript, jquery, react
- Domain
- build-system, tooling
Research direction
Start with package.json and gulpfile.js, then trace factor-bundle's plugin entry point and browserify-shim handling of the jquery dependency. Reproduce the factor-bundle outputs from the shown pages/common setup and verify that jquery plugins retain window.jQuery without the manual HTML require.
Written by the indexing model from the issue text.
Description
We were using browserify with browserify-shim to be able to use jQuery with a few plugins. So far so good. At this time we were creating another bundle for dependencies common across all pages, manually specifying them.
We then discovered and decided to use factor-bundle to factor common dependencies in a better way. The result was very good in terms of file size, but shims provided by browserify-shim disappeared. Since jQuery and its plugins are used in several pages, they're successfully factored out with factor-bundle, but they're produced without the shims. The problem is that jQuery plugins rely in window.jQuery that's no more available since there's no more shim.
We ended up requireing jQuery manually in the HTML and expose it, with <script>var jQuery = require("jquery")</script>. We would love factor-bundle to work with browserify-shim (or the opposite, whatever).
My understanding is that since factor-bundle is a plugin that act at the bundle level, it may not call it properly. But in our setup, it successfully apply the reactify transform (we use React.js with JSX syntax). So I suppose it's not a problem of factor-bundle not using transforms at all, but a specific incompatibility between factor-bundle and browserify-shim. However I couln't determine the problem precisely since I'm not familiar at all with the internals of those modules.
For reference in case it helps, here are relevant parts of our package.json and gulpfile (some parts are skipped to focus, it may look inconsistent/weird) :
package.json
"browserify": {
"transform": [
"reactify",
"browserify-shim"
]
},
"browser": {
"jquery": "./node_modules/jquery/dist/jquery.js",
"twitter-typeahead": "./node_modules/typeahead.js/dist/typeahead.bundle.js",
"magnific-popup": "./node_modules/magnific-popup/dist/jquery.magnific-popup.js"
},
"browserify-shim": {
"jquery": "$",
"slick-carousel": {
"depends": [
"jquery"
]
},
"twitter-typeahead": {
"depends": [
"jquery"
]
},
"magnific-popup": {
"depends": [
"jquery"
]
}
}
gulpfile.js
function browserifyPages() {
var pages = fs.readdirSync("./pages");
var b = browserify(pages.map(function (p) {
return "./pages/" + p;
}), BROWSERIFY_ARGS);
b.require("jquery");
b = minifyBundle(b); // using minifyify
return b.plugin("factor-bundle", {outputs: pages.map(function (p) {
return JS_DST_DIR + "/" + p;
})});
}
function browserifyCommonJs() {
var b = browserify("./common/header.js", BROWSERIFY_ARGS);
b.external("jquery");
return minifyBundle(b);
}
Hope this helps identify the problem. Thanks in advance.
(Let me ping browserify-shim people : @thlorenz and @bendrucker. In case I shouldn't, sorry guys !)
- Dominant language
- JavaScript
- Stars
- 397
- Forks
- 24
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from browserify/factor-bundle
-
Difficulty 4/5 3-5 days Newbie friendliness 32/100
browserify/factor-bundle#95 ·
-
Difficulty 4/5 3-5 days Newbie friendliness 30/100
browserify/factor-bundle#94 ·
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
browserify/factor-bundle#92 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
browserify/factor-bundle#83 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
browserify/factor-bundle#82 · 3 reactions ·
All issues in browserify/factor-bundle
Similar issues
-
bot:ai-assisted component:compact-js status:untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
midnightntwrk/midnight-sdk#403 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
Difficulty 1/5 1-3 hours Newbie friendliness 86/100
DavidAnson/markdownlint-cli2#940 ·
-
documentation
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
githubnext/gh-aw-workshop#3692 ·
-
agent/guide documentation hive/hosted-available-lke648397-260827-5n31
Difficulty 2/5 1-3 hours Newbie friendliness 90/100