Как удалить/изменить некоторые вызовы require() при использовании браузера?

У меня есть приложение, написанное на node.js, для которого требуются некоторые модули npm (реакция, реакция-маршрутизатор и другие). Когда я запускаю на нем браузер, все модули npm «вводятся» в файл bundle.js. Я хочу предоставить дистрибутив для Bower, который не будет включать зависимости react и react-router в файле bundle.js, потому что на них можно ссылаться как на зависимости в bower.json.

приложение.js:

var React = require('react')
React.render(...)

В bundle.js в него внедряется реакция вместе с app.js

Мне нужен bundle.js, который не будет содержать реакции и будет предполагать, что он доступен в глобальной (оконной) области.

пакет.js:

React.render(...)

или что-то вроде этого:

var require = function(name){ return window[name] }
var React = require('react')
React.render(...)

Итак, в основном я хочу сказать браузеру, что НЕКОТОРЫЕ из модулей можно найти в области window и их не нужно вводить в bundle.js...


person user606521    schedule 21.06.2015    source источник
comment
Не уверен, что есть способ сделать это напрямую с конфигами Browserify, но пакет browserify-shim, кажется, справляется с вашим вариантом использования.   -  person Mathletics    schedule 21.06.2015
comment
Эй, мне не удалось заставить его работать с browserify-shim, однако я нашел этот модуль browserify-global-shim, который просто заменяет указанный модуль, требует (require('XXX') => window.XXX)   -  person user606521    schedule 22.06.2015
comment
@user606521 user606521 Благодаря тебе моя проблема решена, приятель! Спасибо! stackoverflow.com/questions/34681058/   -  person user2290820    schedule 09.01.2016


Ответы (1)


Используйте -x [Module Name], чтобы исключить модули узла из пакета.

browserify -d -x react -x react-router app.js > bundle.js
person marcel    schedule 21.06.2015
comment
Вы знаете, как я могу использовать опцию -x из кода (не cli)? Я не могу найти соответствующую опцию браузера в документации... - person user606521; 22.06.2015
comment
Сорри, я не знаю, как это использовать из кода. Но зачем вам делать эти модули глобальными? Вы можете объединить их в отдельный файл. - person marcel; 22.06.2015
comment
Вы можете проверить, существует ли модуль. var React = require('react');. React будет неопределенным, если не сможет найти модуль. - person marcel; 22.06.2015
comment
Я хочу сделать свой пакет доступным для Bower. В Bower вы просто вводите зависимости в bower.json, а не связываете их вместе с кодом вашей собственной библиотеки. - person user606521; 22.06.2015