Bundler和Minifier因使用strict模式而失败

4
我正在使用libman.json将客户端库从cdnjs下载到我的项目文件夹中。然后,我想将这些库捆绑并压缩成一个单独的js文件,以便在web应用程序中进行部署和引用。为此,我使用了一个名为Bundler & Minifier的Visual Studio扩展程序。我已经在bundle.config中设置好了所有内容,但是我遇到了一个问题,就是我正在尝试捆绑的其中一个库-Chart.js(2.8.0)-如果我在捆绑中包含它,那么编译时就会出现以下错误:
(Bundler & Minifer) Strict-mode does not allow assignment to undefined variables: r
难道这不应该是个警告而不是错误吗?我不明白这怎么会阻止捆绑/压缩并导致构建失败。有没有一种方法可以覆盖这种行为?

我认为这并不是一个捆绑错误... .js文件正在使用严格模式。在严格模式下,.js应该明确定义变量...(不能使用未定义的变量)...只需修复.js文件中的错误(使用var来定义变量)或删除"use strict";即可。 - Hooman Bahreini
我同意,但问题在于我不应该修改通过包管理器获取的第三方库,因为这样每个团队成员都需要确保他们进行相同的修改。我同意Chart.js开发人员将'use strict'放入源代码中,然后不遵守所有规则是他们的错,但我仍然认为这不应该阻止缩小和捆绑。肯定会打印警告,但不应该阻止我构建我的解决方案。 - Nathan Kamenar
问题出在Chart.js上。如果你查看下面链接中的源代码,第359-364行有case语句设置了一个变量r,但是r从未被声明。这就导致了打包程序失败。 https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.js - Nathan Kamenar
可以在他们的Github上提出问题/错误。 - Hooman Bahreini
我会做到,但同时我希望能找到一个临时解决方案,因为这个问题实际上阻止了我构建我们的解决方案。 - Nathan Kamenar
我同意更改第三方库并不理想,但如果你修复了问题并将更改检入源代码控制中,你的团队成员就可以从源代码控制中获取这些更改... 这样就可以继续进行,直到 chart.js 发布新版本。 - Hooman Bahreini
2个回答

3

2019年3月18日,在Chart.js的GitHub上提出了未定义变量赋值问题

如需手动修复,请在Chart.jshwb2rgb(hwb)函数(v2.8.0,第343行)中添加以下变量声明:

var r, g, b;

1

这不应该是一个警告而不是错误吗?

不,因为这就是使用严格模式的全部意义,我们想要得到错误(而不是警告)。来自mozilla开发者参考文档

严格模式将一些以前被接受的错误变成了错误。JavaScript旨在让初学者开发人员易于使用,有时它会给出本应该是错误语义的操作。有时这可以解决即时问题,但有时这会在未来造成更严重的问题。严格模式将这些错误视为错误,以便及时发现并修复。

如果您的第三方库存在错误,则可以修复问题或放弃该库...如果您不想在本地项目中修复它,则可以在此处提出问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接