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

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

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

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

Ответы

Ответ 1

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

Он идентифицирует ресурс, который является частью плагина.
Структура идентификатора: [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() должен удовлетворять требованиям синтаксиса, используемого для идентификации ресурса, который сам является частью плагина.

Ответ 2

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

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