Я создаю свой первый компонент Bower. После запуска bower init
script спрашивает меня: "Какие типы модулей выставляют этот пакет?" с этими параметрами:
- amd
- es6
- globals
- node
В чем разница между этими параметрами?
Я создаю свой первый компонент Bower. После запуска bower init
script спрашивает меня: "Какие типы модулей выставляют этот пакет?" с этими параметрами:
В чем разница между этими параметрами?
Если вы не знаете, скорее всего, глобальный выбор - правильный ответ для вас.
В любом случае вам нужно понять:
Эта функция была введена совсем недавно в беседке и еще не задокументирована (AFAIK). Он по существу описывает moduleType
, в котором указывается, для какой модульной технологии предполагается, что пакет предназначен для потребления (см. Выше).
В настоящий момент это не имеет никакого эффекта, кроме установки свойства moduleType
в файле bower.json
пакета.
См. https://github.com/bower/bower/pull/934 для исходного запроса на pull.
Несколько дополнительных вопросов, чтобы ответить на комментарии:
moduleType
- это означает, что людям технически разрешено использовать любое значение, которое они хотят для него, включая angularjs
, если они склонны это делатьnon-interoperable/proprietary moduleTypes
(think composer, angular и т.д.) - это легко понять, но опять же, ничто не мешает людям использовать значение moduleType
, которое они хотят.yui moduleType
, поэтому есть "исключения", которые предполагается сделать, если они являются частью согласованного планаЧто бы я сделал, если бы я был автором пакета для не-указанного менеджера пакетов и опубликовал его на bower?
Я бы написал модуль es6 и использовал /patch es6-transpiler для вывода нужного формата пакета. Тогда я бы либо/и:
es6
как moduleType
Отказ от ответственности: у меня нет реального опыта разработки угловых модулей.
Я использую bower init
для первого раза.
Параметры должны ссылаться на различные способы модуляции кода JavaScript:
define
, например requirejs.require
.В моем случае я написал модуль Node.js dflow, но я пользуюсь браузером для создания файла dist/dflow.js, который экспортирует глобальный dflow var: поэтому я выбрал globals.
Команда, которую я использовал для браузера dflow, поскольку глобальный объект окна был
browserify -s dflow -e index.js -o dist/dflow.js
Я изменил его, потому что предпочитаю использовать require также внутри браузера, поэтому теперь я использую
browserify -r ./index.js:dflow -o dist/dflow.js
и поэтому я изменил значение bower.moduleType на node в файле bower.json.
Основная мотивация заключалась в том, что если мое имя модуля имеет тире, например, мой проект flow-view, Мне нужно преобразовать глобальное имя в flowView.
Этот новый подход имеет два других преимущества:
${npm_package_name}
и писать после script, который я использую для прокрутки.Это еще одна тема, но, действительно, стоит подумать о том, насколько полезно последнее преимущество: позвольте мне поделиться атрибутом npm.scripts.browserify
, который я использую в моем package.json
"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"
Просто для справки, это именно то, что bower указывает на типы модулей:
Тип модуля, определенный в файле
main
JavaScript. Может быть один или массив следующих строк:
globals
: модуль JavaScript, который добавляет к глобальному пространству имен, используя синтаксисwindow.namespace
илиthis.namespace
amd
: модуль JavaScript, совместимый с AMD, например RequireJS, используя синтаксисdefine()
node
: модуль JavaScript, совместимый с node и CommonJS с использованием синтаксисаmodule.exports
es6
: модуль JavaScript, совместимый с модулями ECMAScript 6, используя синтаксисexport
иimport
yui
: модуль JavaScript, совместимый с модулями YUI, используя синтаксисYUI.add()
Соответствующая ссылка: https://github.com/bower/spec/blob/master/json.md#moduletype