bower init - разница между amd, es6, globals и node

Я создаю свой первый компонент Bower. После запуска bower init сценарий спрашивает меня: «Какие типы модулей предоставляет этот пакет?» с этими параметрами:

  • и
  • es6
  • глобалы
  • узел

в чем разница между этими вариантами?


person pherris    schedule 26.03.2014    source источник


Ответы (3)


Если вы не знаете, вполне вероятно, что globals - правильный ответ.

В любом случае вам нужно понимать:

[ОБНОВИТЬ]

Эта функция была представлена ​​в bower совсем недавно и еще не задокументирована (AFAIK). По сути, он описывает moduleType, который указывает, для какой модульной технологии пакет предназначен для использования (см. Выше).

Прямо сейчас это не имеет никакого эффекта, кроме установки свойства moduleType в bower.json файле пакета.

См. https://github.com/bower/bower/pull/934 для исходного запроса на вытягивание.

[ОБНОВЛЕНИЕ №2]

Несколько дополнительных моментов, чтобы ответить на комментарии:

  • прямо сейчас, AFAIK, для свойства moduleType не выполняется проверка - это означает, что людям технически разрешено использовать любое значение, которое они хотят для него, включая angularjs, если они чувствуют склонность к этому
  • комитет по беседке, похоже, не заинтересован в добавлении дополнительных non-interoperable/proprietary moduleTypes (подумайте, композитор, angular, и т. д.) - что легко понять, но опять же, ничто действительно не мешает людям использовать значение moduleType, которое они хотят
  • Исключением из предыдущего является (отчасти) недавнее включение yui moduleType, поэтому должны быть сделаны «исключения», предполагая, что они часть согласованного плана

Что бы я сделал, если бы написал пакет для неуказанного в списке диспетчера пакетов и опубликовал его на bower?

Я бы написал модуль es6 и использовал / patch es6-transpiler для вывода нужного мне формата пакета. Тогда я бы либо / и:

  • попросите ребят из беседки включить мою пакетную технологию в качестве выбора (на основе того факта, что она поддерживается es6-transpiler в качестве цели)
  • опубликуйте мой пакет, включая его версию модуля es6 и его перенесенную версию XXX, и используйте es6 в качестве moduleType

Отказ от ответственности: у меня нет реального опыта создания модулей angularjs.

person Mangled Deutz    schedule 27.03.2014
comment
будут ли глобалы правильным ответом для создания модуля / пакета AngularJS? - person ; 30.04.2014
comment
Я обновил свой пост дополнительными мыслями о том, что делать с неподдерживаемыми менеджерами пакетов - опять же, это поле не является обязательным и не используется сейчас для чего-либо - его значение является только информативным. Что касается самого по себе angularjs, я мог бы использовать globals, да, но прочтите мое обновление. Надеюсь, это поможет. - person Mangled Deutz; 30.04.2014
comment
Я использую узел. Означает ли это, что я раскрываю модули узлов? Я также использую angular, который я устанавливал с помощью bower, когда заметил, что у меня было сообщение о том, что у меня нет файла bower.json для сохранения, используйте bower init для его создания. (Или, если это отдельный вопрос, я могу написать вопрос. Я подумал, что, может быть, это подходящий комментарий, поскольку он относится к вашему ответу. Спасибо!) - person PrairieProf; 18.08.2014

Исходный

Я тоже впервые использую bower init.

Параметры должны относиться к различным способам модуляции некоторого кода JavaScript:

  • amd: с использованием AMD define, например requirejs.
  • узел: с использованием Node.js require.
  • globals: использование шаблона модуля JavaScript для отображения глобальной переменной (например, window.JQuery).
  • es6: использование предстоящей функции модуля EcmaScript6.

В моем случае я написал модуль Node.js dflow, но я использую browserify для создания Файл dist / dflow.js, который экспортирует глобальную переменную dflow: поэтому я выбрал globals.

Прочие обновления

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

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.

У этого нового подхода есть еще два преимущества:

  1. Узел и интерфейс браузера одинаковы. Используя require как на стороне клиента, так и на стороне сервера, позвольте мне написать только один раз примеры кода и легко повторно использовать их в обоих контекстах.
  2. Я использую сценарии npm, поэтому я могу воспользоваться переменной ${npm_package_name} и написать один раз сценарий, который я использую для просмотра.

Это другая тема, но стоит подумать о том, насколько полезно последнее преимущество: позвольте мне поделиться атрибутом npm.scripts.browserify, который я использую в моем package.json

"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"

person Community    schedule 06.11.2014
comment
вы можете использовать require внутри определения, например: define(function(require, exports, module) { "use strict"; module.exports = { Collection: require("./collection"), View: require('./view') }; }); - person Doron Segal; 03.04.2015

Для справки, это именно то, что 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

person Wtower    schedule 08.02.2016