我可以检测到 javascript 正在加载未缩小的(作为调试模式)
Can I detect that javascript is being loaded unminified (as debug mode)
当我 运行 我的应用程序处于 调试模式 (未压缩和未捆绑的脚本)时,我想提供额外的控制台日志。有没有一种简单的方法可以在脚本中检测到这一点?
我正在考虑拥有一个具有长参数名称的函数,然后获取该函数的字符串表示形式,检查该参数是否具有这么长的名称,或者它是否在缩小期间更改为较短的版本(因为缩小器会这样做)。
有没有更好更简单的方法?
我想避免将全局变量设置为特定值然后忘记在部署期间重置它的情况。我想要一些可以消除人为错误的防弹工具。
您检查一段源代码长度的想法可行。
但是,更传统的方法是将您的全局变量/环境配置外部化为您在 dev/production 期间包含的单独文件:
- env.js(用于生产)
- env.dev.js(用于开发)
在开发中,您的应用程序默认包含 env.dev.js。在生产缩小期间,您将改为包含 env.js。
缩小检测
正如问题中提到的,这是我一直在考虑的解决方案,并且做得很好。只要缩小算法也缩小函数名称和参数,此检测将按预期工作。
window.debugging = (function detect(undefined) {
// has function itself been renamed?
if (!detect) return false;
// has parameter been renamed?
return /function\s\w+\((\w*)\)/i.exec(detect.toString())[1] === "undefined";
})();
并且它们具有在代码中使用的函数,例如:
var debuglog = (function() {
if (debugging === true)
{
return console.log;
}
return function() { return; };
})();
如果这只是一个功能,我们也可以将其合并到原始检测功能中,因此不是 returning true/false 而是 return 一个 console.log
重定向功能或无操作功能。
当我 运行 我的应用程序处于 调试模式 (未压缩和未捆绑的脚本)时,我想提供额外的控制台日志。有没有一种简单的方法可以在脚本中检测到这一点?
我正在考虑拥有一个具有长参数名称的函数,然后获取该函数的字符串表示形式,检查该参数是否具有这么长的名称,或者它是否在缩小期间更改为较短的版本(因为缩小器会这样做)。
有没有更好更简单的方法?
我想避免将全局变量设置为特定值然后忘记在部署期间重置它的情况。我想要一些可以消除人为错误的防弹工具。
您检查一段源代码长度的想法可行。
但是,更传统的方法是将您的全局变量/环境配置外部化为您在 dev/production 期间包含的单独文件:
- env.js(用于生产)
- env.dev.js(用于开发)
在开发中,您的应用程序默认包含 env.dev.js。在生产缩小期间,您将改为包含 env.js。
缩小检测
正如问题中提到的,这是我一直在考虑的解决方案,并且做得很好。只要缩小算法也缩小函数名称和参数,此检测将按预期工作。
window.debugging = (function detect(undefined) {
// has function itself been renamed?
if (!detect) return false;
// has parameter been renamed?
return /function\s\w+\((\w*)\)/i.exec(detect.toString())[1] === "undefined";
})();
并且它们具有在代码中使用的函数,例如:
var debuglog = (function() {
if (debugging === true)
{
return console.log;
}
return function() { return; };
})();
如果这只是一个功能,我们也可以将其合并到原始检测功能中,因此不是 returning true/false 而是 return 一个 console.log
重定向功能或无操作功能。