2013-06-29 3 views
6

Я разрабатываю библиотеку A и библиотеку B, B в зависимости от A. Я хотел бы, используя браузер, объединить их самостоятельно, поэтому в моем браузере я мог бы сделать:Обозревайте, чтобы загружать зависимости из глобальной потребности области, а не ожидая, что они будут объединены вместе.

var A = require("A"); 
var B = require("B"); 

Я хотел бы связать их независимо друг от друга, как я также разработки библиотеки C, что только зависит от а и а входит в B, то он не будет доступен C, и если A находится в B и C, у меня есть дубликаты.

Так я начинаю с библиотекой browserifying A:

browserify -r ./src/A.js:A -o build/A.js 

Который работает прекрасно, я могу распространять и другие люди могут разрабатывать свои приложения с ней.

Тогда я browserify библиотеки B:

browserify -r ./src/B.js:B -o build/B.js 

Но теперь у меня есть два раза, А загружаемый самостоятельно в браузере и еще раз в комплекте с Б. Так я использую опцию -i из browserify, чтобы предотвратить это от включения:

browserify -r ./src/B.js -o build/B.js -i A 

Но тогда, когда B требует A, он получает пустой объект {} вместо библиотеки. Библиотека A хотя по-прежнему доступна из глобальной области, требуя («A»).

Я попробовал внешнюю вещь с -x, но тогда я больше не могу требовать мою библиотеку из глобального пространства.

Мне удалось получить поведение, которое я хотел, взломав сгенерированный вывод B, вынудив разрешение модуля получить A от предыдущего запроса, что заставляет меня думать, что может быть простое решение, но я не могу Найди это.

Я использую browserify 2.18.1

+0

-x, --external должно быть тем, что вы ищете. Смотрите: https://github.com/substack/node-browserify#multiple-bundles – Epeli

+0

@Epeli, я попробовал вариант --external, но, похоже, он не действует, поскольку A все еще находится в B. Я попытался дать имя модуля: 'browserify -x A -r ./src/B.js:B -o build/B.js' или указывая на файл: 'browserify -x node_modules/A/A.js -r -o ./src/B.js:B построить/B.js' Любая идея, что -x может принимать как действительный вход? Моя проблема, похоже, связана с этой проблемой в [browserify's GitHub] (https://github.com/substack/node-browserify/issues/404). – Olivier

+0

afaik должен принимать путь к js-файлу и имени модуля. – Epeli

ответ

1

Два способа смотреть на него:

  • Придумайте B, как JQuery-щ и А, как JQuery. До пользователей включить jquery в DOM, если они хотят использовать jquery-ui. Так что, хотя здание B вообще не требует A.

  • Документ о том, что B имеет встроенный в него A. Пользователи, которые используют B, просто не должны включать A вообще. В этом сценарии вам, очевидно, нужно потребовать A и объединить B вместе с A.

  • В общем, если у вас есть 2 browserified связки, с общими частями, которые ввозятся на странице ЖЕ тогда вы уже попали в проблему расслоения организации/зависимость, какие компоненты идут в том, что что-то и т.д. в основах которого необходимо пересмотреть/изменить