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

gil*_*lyb 16 javascript amd node.js node-modules intern

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

var assert = require('intern/chai!assert');
var registerSuite = require('intern!object');
Run Code Online (Sandbox Code Playgroud)

方法!论证中字符的用途是什么require()

sky*_*ack 7

简短的回答

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

答案很长

文档中,您可以找到:

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

这就是为什么以及如何require实际注入函数,因此很明显您没有使用Node.JSrequire提供的模块.

它还指出:

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

如果您在引用加载程序时按照文档提供的链接进行操作,则会发现:

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

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

[Plugin Module ID]![resource ID]
Run Code Online (Sandbox Code Playgroud)

毫无疑问,使用实习生获得的加载器的默认实现遵循上述标准.

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

intern/chai!assert
Run Code Online (Sandbox Code Playgroud)

您可以将其作为inter/chai插件模块和assert实际所需资源进行阅读.

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