Шимминг зависимостей зависимостей с browserify-shim
Я пытаюсь реорганизовать библиотеку, которая использует Browserify, путем выделения определенных модулей из комплекта с помощью browserify-shim. В частности, библиотека использует require("codemirror"), но я хочу предоставить пакет, который не включает CodeMirror, а скорее будет использовать тот, который предоставляется через CDN.
Таким образом, у меня есть config browserify-shim в моем package.json как
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror"
}
Все идет нормально. require('jquery') и require('codemirror') исчезли из пакета, подвергшегося проверке с помощью браузера, и были заменены ожидаемым фрагментом кода для извлечения jQuery и CodeMirror из объекта window.
Библиотека также требует некоторых дополнений CodeMirror. Например, require ('codemirror / addon / hint / show-hint.js'). Все в порядке. Я хочу, чтобы это дополнение в комплекте. Однако в этом дополнении есть оболочка UMD, которая включает require("../../lib/codemirror"). Browserify видит это и связывает CodeMirror из /node_modules/codemirror/lib/codemirror.js из-за этого (я думаю). Я хочу, чтобы это использовало window.CodeMirror, как определено в shim codemirror, но не могу понять это. Перепробовал много вариантов, включая следующие:
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror",
"../../lib/codemirror": "global:CodeMirror",
"codemirror/addon/hint/show-hint.js": {
"exports":null,
"depends":["../../lib/codemirror:CodeMirror"]
}
}
Это требует ("../../ lib / codemirror") не исчезнет! Я уверен, что что-то упустил.
Я запускаю это из сценария Gulp, но я не думаю, что это должно иметь какое-либо значение. Browserify версия 3.38.1. Browserify-shim версия 3.7.0.
Есть идеи?
2 ответа
Если вы добавите browserify-shim
с {global: true}
, это должно применяться и к зависимостям ваших зависимостей (и так далее), которые, мы надеемся, должны делать то, что вы хотите.
Предполагая, что вы используете raw browserify в своем Gulpfile, вместо:
b.transform('browserify-shim');
делать:
b.transform({global: true}, 'browserify-shim');
Если вы используете gulp-browserify
Я не уверен, есть ли способ указать глобальные преобразования.
{global: true}
у меня работает... почему это не по умолчанию?