- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的代码库中,我有这个与 fabric.js 交互的自定义代码:
export function cropToCircle(object) {
let minDim = Math.min(object.width, object.height);
window.lastMinDim = minDim;
return object.set('clipTo', ctx => {
if (typeof minDim === 'undefined') minDim = window.lastMinDim || 1000;
ctx.arc(0, 0, minDim / 2, 0, Math.PI * 2, true);
});
}
它被 uglify.js 缩小到这个字符串中,我在这里展示它是美化的:
function s(e) {
var t = Math.min(e.width, e.height);
return window.lastMinDim = t, e.set('clipTo', function (e) {
'undefined' === typeof t && (t = window.lastMinDim || 1e3), e.arc(0, 0, t / 2, 0, 2 * Math.PI, !0);
});
}
在运行时,这个缩小的代码在大多数调用中都运行良好。但是有一个由 Fabric 的 canvas.renderAll()
触发,我在其中收到错误“Reference Error: e is not defined”。错误发生在执行 e.set('clipTo')
的回调期间。
令人惊奇的是,如果我检查调试器,我会看到回调正在作为一个片段运行,其中输入参数被称为 ctx
而不是 e
.这是屏幕截图:
显然,如果解释器将输入参数重命名为ctx
,则body 中的e
没有定义;但就像浏览器“知道”e
最初被称为 ctx
一样,这对我来说没有任何意义,除非 Fabric(使用 ctx
无处不在)以某种方式影响了这段代码的执行。
这在 Chrome 65 和 Firefox 59 中都得到了验证。
我已经尝试了所有我能想到的方法来更改源代码中的某些内容以避免 ctx
的出现:
ctx
重命名为context
但还是不开心。
谁能解释为什么浏览器要重命名此回调的输入变量?
最佳答案
这是一个非常值得纪念的事故。从未见过这样的事情,显然,似乎没有其他人对此有任何看法。
我找到的解决方案是保护参数名称 ctx
在缩小过程中不被破坏。
相关的 UglifyJS 配置是:
mangle: {
except: ['ctx'],
},
它创建了以下缩小/美化的代码:
function s(e) {
var t = Math.min(e.width, e.height);
return window.lastMinDim = t, e.set('clipTo', function (ctx) {
'undefined' === typeof t && (t = window.lastMinDim || 1e3), ctx.arc(0, 0, t / 2, 0, 2 * Math.PI, !0);
});
}
这样浏览器仍然会用 ctx
覆盖输入参数名称,但在这种情况下,函数体在执行期间仍然有意义。
关于javascript - UglifyJs - 缩小的损坏变量在运行时恢复其原始名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939260/
我有以下命令: uglifyjs main.js bar.js -m toplevel reserved=['$','addTo','exports'] -c --source-map -o
我在尝试覆盖被丑化的文件时遇到问题。不幸的是,我无法输出到不同的文件名。 以下是一些尝试: uglifyjs dist/main.*.js --compress drop_console=true -
我正在编写一个使用许多 JS 文件的应用程序。 Underscore、Backbone、jQuery、 slider 的 jQuery 插件、模型、路由器、集合和 View 的几个文件。 在我的开发机
我在 2012 年发现了一个有类似问题的帖子,但是它调用 uglifyjs 的方式不同 Uglify-js doesn't mangle variable names 我有一个 Windows 7 环
我已将 uglifyjs 插件添加到我的项目中grails install-plugin uglify-js-minified-resources . 还添加了 compile ":uglify-js
我正在使用 UglifyJS破坏和压缩我的 SPA 的 JavaScript 代码。这对于生产来说没问题,但是我只想在 Debug模式下编译时附加所有 JS 文件。 我尝试省略 -c -m 选项(co
在我的代码库中,我有这个与 fabric.js 交互的自定义代码: export function cropToCircle(object) { let minDim = Math.min
我正在尝试获取一个简单的 UglifyJS (v2.3.6) 示例来处理压缩。 具体来说,“未使用”选项,如果从未使用过,变量和函数将被删除。 这是我在命令行上的尝试: echo "function
我有以下代码(为方便讨论而简化): var a = 1; var b = []; if (checkIfAisOne(a)) { b = ['something'] } console.log
我想知道如何从命令行使用 UglifyJS 压缩内联脚本。 所有示例都显示文件名,即 uglifyjs somefile.js -o somefile.min.js 我想做的是: uglifyjs -
我正在尝试使用 UglifyJS 来缩小我的代码,但我遇到了一些问题。我有这样的文件结构: /deploy /assets /js ((minified file goes h
我正在尝试缩小一个 24MB 的 JavaScript 文件,但在大约 10 分钟的运行时间后,脚本退出并显示内存不足的错误。有什么标志可以提供帮助吗?我正在运行具有 16GB 物理内存的 Windo
根据文档,UglifyJS 可以破坏除提供的保留列表中的所有属性名称。是否有可能以其他方式做到这一点,所以只有提供的列表中的属性才会被破坏? 如果是这样,我需要将哪些选项传递给 uglify.mini
uglify-js和uglify-es的描述是相同的,除了uglify-es大写“for ES6 +”。基于此,人们会认为uglify-es是ES6代码的最佳选择。另一方面,uglify-es较旧-5
如何使用 Webpack 和 UglifyJS 删除死代码,但不最小化代码? 最佳答案 您可能想使用 beautifier options .最低限度的想法: new webpack.optimize
有没有办法告诉 UglifyJS 跳过特定的代码部分,也许使用这样的注释: // uglifyjs:skipStart filter = function(item){ /* some crazy f
目前我可以在 Node 环境中使用 UglifyJS 进行缩小。然而,读完这篇blog ,我意识到这个插件还有更多选项。但我无法将这些关键字转换为 Node 环境可接受的语法。 现在,我正在使用 ne
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
在测试服务器上部署我的应用程序时,我遇到了一个错误,其中 UglifyJS 确实更改了 npm 依赖模块的函数参数,这些参数的名称很重要;一些函数是动态调用的,我正在使用 function-argum
A lot of warnings with webpack uglify 我已经关闭了 UglifyJS 中的警告,但我仍然收到来自 webpack 的一些警告。 WARNING in main-0
我是一名优秀的程序员,十分优秀!