2015-03-24 14 views

Odpowiedz

41

@NickTomlin podał tę odpowiedź, ale następnie ją usunął.


Można użyć external:

browserify --external react src.js > dest.js

Przykładem używając API:

var bundler = browserify('src.js'); 

bundler.external('react'); 
bundler.bundle(); 

ten jest realną opcją. external wymaga innego skryptu, aby zapewnić moduł w kompatybilny sposób. Można produkować taki skrypt tak:

browserify -r react > react.js 
env NODE_ENV=production browserify -r react | uglifyjs -m > react.min.js 

I w HTML:

<script src="react.js"></script> 
<script src="dest.js"></script> 

dest.js jest kod wyjątkiem reagować. react.js po prostu reaguje i jego zależności.

Potrzebujesz więcej rzeczy na zewnątrz? Po prostu dodaj je i reaguj.

browserify -x react -x react-bootstrap src.js > dest.js 
browserify -r react -r react-bootstrap > vendor.js 

Można też zrobić coś takiego w package.json

"browser": {"react": "./react-fake.js"} 
// ./react-fake.js 
try { 
    module.exports = require('react'); 
} catch(e){ 
    module.exports = window.React; 
} 

i skompilować z -x react. Pozwala to na zaakceptowanie kompilacji -r react i powrót do globalnego Reaktu.

+0

Wierzę, że jest literówka w środkowym bloku kodu. Nazwa pliku wyjściowego dla pierwszej przeglądarki powinna mieć wartość dest.js, a nie vendor.js, w przeciwnym razie druga przeglądarka zastąpi pierwszą. – Baz

+1

@Baz, dzięki! naprawiono – FakeRainBrigand

+0

Problem polega na tym, że 'browser' jest po prostu przekształceniem, więc nie ma zastosowania do twojego node_modules. Więc jeśli masz jakiekolwiek biblioteki node_modules, które odwołują się do reakcji, wtedy wyrzucą błąd "moduły nie znalezione". – bendytree

6

Wygląda na to, że chcesz użyć browserify-shim.

w twojej package.json

"browserify-shim": { 
    "react": "global:React" 
}, 
"browserify": { 
    "transform": [ "browserify-shim" ] 
}, 
"dependencies": { 
    "browserify-shim": "~3.2.0" 
} 

(niesprawdzone). This section ma więcej informacji.

+0

Zobacz także: http://stackoverflow.com/questions/23125338/how-do-i-use-browserify-with-external-dependencies –

+0

mam dużo kłopotów z browserify-shim. Mam moduł umd, który próbuję przeglądać, a jego niezmienianie modułów wymaga wywołania ("foo") do globalnego ['Foo'], mimo że mój pakiet package.json określa browserify-shim: {'foo': "global: Foo"}. Czy muszę w jakiś sposób kierować ten moduł? jak browserify-shim: {'mod': {depends: "foo"}} – dmarr

2

Chciałem również to zrobić i znalazłem możliwe rozwiązanie.

Z pomocą browserify -h:

--ignore, -i zastąpić plik z pustym odgałęzienie. Pliki mogą być globs.

Po prostu użyj funkcji ignore.

browserify -i react -i react-dom ... 

Dodałem też reagować i reagować-DOM jako wzajemnych zależności, przyczyny w moim przypadku, pakiet może zostać przywiezione w innych pakietach buduje.

Powiązane problemy