什么是"!" nodejs模块名称中的字符?

时间:2016-01-21 13:41:37

标签: javascript node.js amd intern node-modules

我已经开始使用实习生库在js中编写功能测试,我意识到我无法理解这种语法:

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

!方法的参数中require()字符的用途是什么?

2 个答案:

答案 0 :(得分:7)

简短回答

它标识了作为插件一部分的资源 标识符的结构为:[plugin]![resource]

答案很长

documentation中,您可以找到:

  

Intern建立在标准的amd加载器之上,这意味着它的模块通常也以AMD模块格式编写。

这就是require函数实际注入的原因和方式,因此很明显您没有使用 Node.JS 提供的require模块。

它还说:

  

[AMD格式]允许通过编写简单的加载器插件来异步或有条件地解析模块和其他资产

如果您在引用加载程序时遵循文档提供的link,则会发现:

  

Loader插件通过允许加载非传统JavaScript依赖项的资源来扩展AMD实现。

特别是,您可以发现依赖项具有以下形式:

[Plugin Module ID]![resource ID]

不言而喻,使用 intern 获得的 loader 的默认实现符合上述标准。

那就是说,如果我们考虑:

intern/chai!assert

您可以将其视为inter/chai作为插件模块,将assert视为实际需要的资源。

require()方法的参数中字符的用途是满足用于标识资源的语法要求,该资源本身就是插件的一部分。

答案 1 :(得分:4)

我从similiar question中提取了这个答案,explunit很好地解释了这个答案:

  

感叹号语法是为插件保留的。通常,在感叹号之后会有其他东西指示插件将加载的资源,例如, text!myTemplate.html,但是在domReady的情况下!插件的存在只是在调用回调函数之前等待DOM加载的方式,因此不需要遵循感叹号。