2015-07-16 14 views
5

Zaskakuję problem z Browserify, dotyczące wtyczek jQuery. Ponieważ mam wiele pakietów dla oddzielnych pod-aplikacji, mam pewne globalne biblioteki jako znaczniki <script> w moim kodzie HTML, aby zapobiec powtórzeniu.Fałszywe globalne jQuery z browserify-shim? (Nie można znaleźć modułu "jquery")

Używam gulp, browserify-shim i babelify do tworzenia moich pakietów.

ciągu package.json:

"dependencies": { 
    "jquery.cookie": "^1.4.1", 
    ... 
}, 
"browserify-shim": { 
    "jquery": "global:jQuery", 
    ... 
}, 
"browserify": { 
    "transform": [ 
    "browserify-shim" 
    ] 
} 

ciągu base.html: (w produkcji będą one CDN linki)

<!--[if lt IE 9]><script src="/bower_components/jquery-legacy/jquery.min.js"></script><![endif]--> 
<!--[if gte IE 9]><!--> 
<script src="/bower_components/jquery/dist/jquery.min.js"></script> 
<!--<![endif]--> 

W jednym z moich plików źródłowych: Komunikat

import $ from 'jquery'; // this works 
import 'jquery.cookie'; // this crashes browserify 

błędzie:

Error: Cannot find module 'jquery' from '/path/to/node_modules/jquery.cookie' 

jQuery to nie zainstalowane z npm, ponieważ nie chcę, aby było ono wtaczane do moich pakietów.

Zgaduję, że problem polega na tym, że jest wywołanie require('jquery') w ramach jquery.cookie.js, które nie zostało rozwiązane.

Jak "sfałszować" istnienie globalnej instancji jQuery do wtyczki z browserify-shim?


NB: This solution nie spełnia moich potrzeb, jak jQuery będzie wdrażany w wielu wiązek.

Odpowiedz

6

Rozwiązany. This solution wydaje się działać doskonale.

Dla porównania, tutaj jest mój (stałe) watchify wezwanie od mojego Gulpfile:

var b = browserify({ 
    entries: [app.input_dir + app.entry], 
    debug: true, 
    cache: {}, 
    packageCache: {}, 
    fullPaths: true 
}) 
    .transform(babelify) 
    .transform({ 
     global: true 
    }, 'browserify-shim') 
    .plugin('minifyify', { 
     map: app.output_dir + app.entry + '.map', 
     output: app.output_dir + app.entry + '.map' 
    }); 

var watcher = watchify(b); 
+0

W wierszu poleceń (lub uruchom skrypt NPM) byłoby to: 'browserify -t [browserify-podkładka --global ] index.js' (wymaga wpisu "" browserify-shim ": {...}' w pakiecie.json). – smhg

+0

@azz @smhg Dzięki za to. Czy wiesz, gdzie jest udokumentowana flaga '--global'? To działało dla mnie, ale nie mogę go znaleźć w dokumentach [tutaj] (https://www.npmjs.com/package/browserify) lub [tutaj] (https://www.npmjs.com/package/browserify -shim). –

Powiązane problemy