Что это ! символ делать в именах модулей nodejs?

Я начал использовать библиотеку intern для написания функциональных тестов на js и понял, что не могу понять этот синтаксис:

var assert = require('intern/chai!assert');
var registerSuite = require('intern!object');

Каково назначение символа ! в аргументе метода require()?


person gillyb    schedule 21.01.2016    source источник
comment
github.com/theintern/intern-tutorial   -  person Royi Namir    schedule 21.01.2016


Ответы (2)


Короткий ответ

Он идентифицирует ресурс, являющийся частью подключаемого модуля.
Структура идентификатора: [plugin]![resource].

Длинный ответ

В документации вы можете найти следующее:

Intern построен на основе стандартного загрузчика AMD, а это означает, что его модули также обычно записываются в формате модулей AMD.

Вот почему и как на самом деле внедряется функция require, поэтому ясно, что вы не используете модуль require, поставляемый вместе с Node.JS.

В нем также говорится, что:

[Формат AMD] Позволяет асинхронно или условно разрешать модули и другие активы путем написания простых подключаемых модулей загрузчика.

Если вы перейдете по ссылке, предоставленной вместе с документацией, когда она цитирует погрузчики, вы обнаружите, что:

Плагины загрузчика расширяют реализацию AMD, позволяя загружать ресурсы, которые не являются традиционными зависимостями JavaScript.

В частности, вы можете обнаружить, что зависимость имеет следующий вид:

[Plugin Module ID]![resource ID]

Само собой разумеется, что реализация загрузчика по умолчанию, которую вы получаете с помощью intern, соответствует вышеупомянутому стандарту.

Из этого следует, что, если мы рассмотрим:

intern/chai!assert

Вы можете прочитать его как inter/chai как модуль плагина и assert как фактически необходимый ресурс.

Назначение символа ! в аргументе метода require() – удовлетворить требованиям синтаксиса, используемого для идентификации ресурса, который сам является частью подключаемого модуля.

person skypjack    schedule 21.01.2016

Я получил этот ответ для вас, извлеченный из этого подобного вопрос и очень хорошо объяснен explunit:

Синтаксис с восклицательным знаком зарезервирован для плагинов. Обычно после восклицательного знака следует что-то еще, указывающее на ресурс, который загружает плагин, например. text!myTemplate.html, но в случае domReady! плагин существует только как способ дождаться загрузки DOM перед вызовом вашей функции обратного вызова, поэтому ничто не должно следовать за восклицательным знаком.

person Luis González    schedule 21.01.2016