2016-01-21 91 views
16

我使用實習生圖書館寫在JS功能測試開始,我意識到,我不明白這句法:什麼是「!」字符在nodejs模塊名稱中做什麼?

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

什麼是!字符的這一論點的目的require()方法?

+0

https://github.com/theintern/intern-tutorial –

+0

這是一個插件名稱 – alex

回答

6

簡短的回答

它標識的資源是一個插件的一部分。
標識符的結構是:[plugin]![resource]

龍答案

documentation,你可以發現:

實習生是建立在一個標準的AMD加載器,這意味着它的模塊也通常寫在AMD的頂部模塊格式。

這就是爲什麼和require功能實際上是如何注入,所以很顯然,你沒有使用與Node.js的一起提供的require模塊。

它規定還指出:

[AMD格式]允許模塊和其他資產通過編寫簡單加載插件

是異步或有條件解決如果按照link提供的文檔當它引用加載程序時,您會發現:

Loader插件通過允許loadi與傳統的JavaScript依賴關係不同的資源。

特別是,你可以找到一個依賴關係有以下形式:

[Plugin Module ID]![resource ID] 

不言而喻的是,裝載機您使用實習生得到的默認實現附着在上述標準。

這就是說,它遵循,如果我們考慮:

intern/chai!assert 

你可以把它讀作inter/chai作爲插件模塊和assert根據實際需要的資源。

的用途!require()方法的參數中的字符是爲了滿足用於標識本身是插件一部分的資源的語法的要求。

4

我得到了這個答案你從這個similiar question提取和explunit很好的解釋:

驚歎號語法保留給插件。通常,感嘆號後面會有其他內容,表示該插件將加載的資源,例如, text!myTemplate.html,但在domReady的情況下!插件存在只是在調用回調函數之前等待DOM加載的方式,所以沒有必要遵循感嘆號。