browserify / browserify/factor-bundle

Factor-bundle and browserify-shim don't play well together

Offen
#59 7 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
JavaScript
Sterne
397
Forks
24
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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 `require`ing jQuery manually in the HTML and expose it, with `var jQuery = require("jquery")`. 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**

``` 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**

``` 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 !)

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne mit package.json und gulpfile.js, verfolge dann den Plugin-Einstiegspunkt von factor-bundle und die Handhabung der jquery-Abhängigkeit durch browserify-shim. Reproduziere die factor-bundle-Ausgaben aus dem gezeigten pages/common-Setup und überprüfe, dass jquery-Plugins window.jQuery ohne das manuelle HTML require beibehalten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, jquery, react
Bereich
build-system, tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.