cocosCreator(以下簡稱ccc)是一款功能很強(qiáng)大的框架介蛉,但是功能再強(qiáng)的框架也不可能面面俱到萌庆,總有一些我們想要的功能它沒有提供的,此時就需要去引用一些提供了我們想要功能的第三方類庫進(jìn)來以便快速地實(shí)現(xiàn)我們的編碼需求币旧。
通常情況下我們可以通過ccc提供的“插件腳本”功能來完成第三方類庫的導(dǎo)入(如果不知道如何操作的請移步官方介紹文檔践险。如果你需要發(fā)布游戲到的平臺僅有WEB平臺的話倒還沒什么,如果準(zhǔn)備發(fā)到微信小游戲平臺的話在使用插件腳本的時候請一定加上“window”前綴吹菱,比如:
$.find('.someClass');//原先的使用方式
window.$.find('.someClass');//樓主建議的使用方式
這是因?yàn)樵趙eb平臺捏境,默認(rèn)會在找不到變量聲明的時候去window這個全局變量下進(jìn)一步查找,但是在微信小游戲平臺并沒有原生提供window這個全局變量毁葱,故我們無法直接使用一些掛載在window上的類庫垫言。ccc在發(fā)布到小游戲平臺時會加進(jìn)來一個適配器,名字叫做“weapp-adapter-min.js”倾剿,這個適配器可以讓我們在代碼中訪問到window變量筷频,使用方法和web平臺一樣。雖然如此前痘,但在小游戲環(huán)境下凛捏,在找不到變量聲明時不會默認(rèn)去window這個全局變量下進(jìn)行查找,所以使用原先的芹缔,不加"window"前綴的方式依舊無法訪問到類庫的全局變量坯癣,此時必須通過加"window"前綴的方式才能訪問到。
前面的說法理論上是沒有問題的最欠,但是實(shí)際使用中仍然無法通過window.$這類語句訪問到j(luò)Query或者其他第三方庫的全局變量示罗,此時的問題就出在第三方庫文件本身上面。很多第三方庫文件在將全局變量暴露到全局的實(shí)現(xiàn)代碼上都會盡量兼容多種js代碼加載環(huán)境芝硬,如CMD,AMD等等蚜点。下面是lodash庫在暴露全局變量時的代碼:
// Some AMD build optimizers, like r.js, check for condition patterns like:
if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
// Expose Lodash on the global object to prevent errors when Lodash is
// loaded by a script tag in the presence of an AMD loader.
// See http://requirejs.org/docs/errors.html#mismatch for more details.
// Use `_.noConflict` to remove Lodash from the global object.
root._ = lodash;
// Define as an anonymous module so, through path mapping, it can be
// referenced as the "underscore" module.
define(function() {
return lodash;
});
}
// Check for `exports` after `define` in case a build optimizer adds it.
else if (freeModule) {
// Export for Node.js.
(freeModule.exports = lodash)._ = lodash;
// Export for CommonJS support.
freeExports._ = lodash;
}
else {
// Export to the global object.
root._ = lodash;
}
我們看到,在上述代碼中拌阴,全局變量lodash被以下劃線'_'的名字掛載到了root上面绍绘,但這個root到底是什么類型的對象我們其實(shí)并不知道。在小游戲環(huán)境中,因?yàn)橥ㄟ^適配器陪拘,讓我們可以像在web平臺一樣使用window對象厂镇,故我們可以通過明確地把第三方類庫的全局變量掛載到window變量上面來解決此問題。按照這個思路左刽,上述代碼可以改成:
window._ = lodash;
這樣就可以讓我們在web和小游戲雙平臺通過一樣的語句來使用lodash庫了捺信。
網(wǎng)上有很多各種功能的js類庫,但是目前很多好用的類庫只提供了nodejs的加載方式(使用npm安裝然后通過nodejs環(huán)境下提供的require語句進(jìn)行加載)悠反。對于這類庫残黑,要是想在ccc使用的話需要使用browserify工具將其轉(zhuǎn)譯成瀏覽器可用的版本后再作為腳本插件供ccc使用馍佑。