@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.
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
@Baz, dzięki! naprawiono – FakeRainBrigand
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