Шимминг зависимостей зависимостей с 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}

у меня работает... почему это не по умолчанию?

Другие вопросы по тегам