Я создаю свой первый компонент Bower. После запуска bower init
сценария спрашивает меня «какие типы модулей предоставляет этот пакет?» с этими опциями:
- драм
- ES6
- глобалы
- узел
В чем разница между этими вариантами?
Если вы не знаете, вполне вероятно, что глобальные ответы - правильный ответ для вас.
В любом случае, вы должны понимать:
Эта функция была введена совсем недавно в беседке и еще не документирована (AFAIK). По сути, он описывает moduleType
, в каком состоянии для какой модульной технологии предполагается использовать пакет (см. Выше).
Прямо сейчас, это не имеет никакого эффекта кроме установки moduleType
свойства в bower.json
файле пакета.
См. Https://github.com/bower/bower/pull/934 для оригинального запроса на извлечение.
Несколько дополнительных пунктов, чтобы ответить на комментарии:
moduleType
собственность - это означает, что людям технически разрешено использовать любое значение, которое они хотят для него, в том числе, angularjs
если они чувствуют склонность сделать этоnon-interoperable/proprietary moduleTypes
(например, композитора, ангуляров и т. д.) - что легко понять, но опять же, ничто не мешает людям использовать moduleType
ценность, которую они хотятyui moduleType
, поэтому есть «исключения», которые необходимо сделать, предполагая, что они являются частью согласованного плана.Что бы я сделал, если бы написал пакет для менеджера пакетов, не включенного в список, и опубликовал бы его на bower?
Я хотел бы написать модуль es6 и использовать / patch es6-transpiler для вывода нужного мне формата пакета. Тогда я бы либо / и:
es6
какmoduleType
Отказ от ответственности: у меня нет реального опыта создания модулей angularjs.
angularjs
само по себе, я мог бы использоватьglobals
, да, но прочитать мое обновление. Надеюсь, это поможет.начальный
Я использую
bower init
в первый раз тоже.Параметры должны ссылаться на различные способы модуляции некоторого кода JavaScript:
define
, как requirejs.require
.В моем случае я написал модуль dflow Node.js, но я использую browserify для создания файла dist / dflow.js, который экспортирует глобальный переменный dflow : поэтому я выбрал глобальные переменные .
Другие обновления
Команда, которую я использовал, чтобы просмотреть dflow как глобальный объект окна, была
browserify -s dflow -e index.js -o dist/dflow.js
Я изменил его, потому что я предпочитаю использовать require и внутри браузера, так что теперь я использую
browserify -r ./index.js:dflow -o dist/dflow.js
и поэтому я изменил bower.moduleType на узел в моем файле bower.json .
Основная мотивация заключалась в том, что если в имени моего модуля есть тире, например, представление потока проекта , мне нужно вербализировать глобальное имя в flowView .
Этот новый подход имеет два других преимущества:
${npm_package_name}
переменные и писать один раз сценарий, который я использую для просмотра.Это еще одна тема, но действительно стоит задуматься о том, насколько полезно последнее преимущество: позвольте мне поделиться
npm.scripts.browserify
атрибутом, который я использую в моем package.json."browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"
источник
define(function(require, exports, module) { "use strict"; module.exports = { Collection: require("./collection"), View: require('./view') }; });
Просто для справки, это именно то, что Бауэр указывает в отношении типов модулей:
Соответствующая ссылка: https://github.com/bower/spec/blob/master/json.md#moduletype
источник