我使用require js来加载谷歌分析。 在配置中我有
requirejs.config({
"paths": {
"ga": "//www.google-analytics.com/analytics",
...
我有一个依赖于初始化分析的模块。
一切正常,直到有人使用阻止谷歌分析的浏览器插件。 当发生这种情况时,生成的javascript错误会破坏所有内容。
如果某个模块无法加载,如何判断requirejs是否合适? 如何使模块可选?
感谢。
答案 0 :(得分:3)
您可以在自己的模块代码中要求模块,但在模块定义要求之外,但这确实意味着您不能轻松地链接您需要的依赖项。即。
define([ /* Normal dependencies here ... */], function() {
try {
require(['ga']);
} catch (error) {
// Handle lack of GA if needed
}
};
或者你必须编写自己的模块包装器,在尝试上述操作时同步阻塞,如果成功则返回GA,否则返回null。
答案 1 :(得分:3)
require
接受第3个参数,这是一个错误回调,因此您可以将window.ga
分配给始终返回undefined的函数。这可以避免在代码中的其他位置调用Google Analytics功能时出错。
require(['ga'], function(data) {
window.ga('create', 'UA-XXXXXXXX-X');
window.ga('send', 'pageview');
}, function() {
window.ga = function(){};
});
答案 2 :(得分:1)
我发现最好的方法是使用数组表示法进行路径定义。这样,您可以在requirejs路径配置中定义模块的外部URL和本地回退。无需额外的try/catch
块或特定于模块的错误处理。
文档链接: http://requirejs.org/docs/api.html#pathsfallbacks
我定义了一个名为noop
的模块,它定义了一个空函数,然后像这样设置我的路径:
requirejs.config({
"paths": {
"ga": [
"//www.google-analytics.com/analytics",
"util/noop"
],
...
答案 3 :(得分:0)
最佳解决方案,对我有用。
打开
BenettonGroupPackingList
文件。
lib/mage/requirejs/resolver.js
替换下面的代码:
/**
* Checks if provided module has unresolved dependencies.
*
* @param {Object} module - Module to be checked.
* @returns {Boolean}
*/
function isPending(module) {
return !!module.depCount;
}
谢谢