使用uglifier来缩小rails中的min.js文件时出错
我有一个rails项目,其中包含一个pdfmake js插件。我把pdfmake.min.js
文件中的assets\javascripts
文件夹并将其添加到application.js
:使用uglifier来缩小rails中的min.js文件时出错
//= require pdfmake.min
在临时服务器,我有相关的资产设置:
config.serve_static_assets = true
config.assets.js_compressor = :uglifier
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = true
# Generate digests for assets URLs.
config.assets.digest = true
不过,我临时服务器上得到了一个错误:
ReferenceError: Can't find variable: n
这个错误不在开发环境中,所以我猜测它是由js编译引起的。
相关源代码:
function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
(function() {
var DecodeStream, iconv;
try {
iconv = __webpack_require__(87);
} catch (_error) {}
DecodeStream = (function() {
var key;
function DecodeStream(buffer) {
this.buffer = buffer;
this.pos = 0;
this.length = this.buffer.length;
}
......
})();
module.exports = DecodeStream;
}).call(this);
min.js和在本地同一而不应用uglifier
function(t, e, n) {
(function(e) {
(function() {
var r,
i;
try {
i = n(84)
} catch (t) {}
r = function() {
function t(t) {
this.buffer = t, this.pos = 0, this.length = this.buffer.length
}
var n;
......
}(), t.exports = r
}).call(this)
代码要被详细描述的,使用时uglifier
引起。 js在uglifier之后升级
function(A, t, e) {
(function(A) {
(function() {
var t,
i;
try {
i = e(84)
} catch (n) {}
t = function() {
function t(A) {
this.buffer = A, this.pos = 0, this.length = this.buffer.length
}
var e;
......
}(), n.exports = t
}).call(this)
根据上面的代码,我们可以发现uglifier
错误地指定module
和Buffer
到A
。我怎样才能解决这个问题?
我有一些想法:
- 上分期禁用
uglifier
。对舞台和制作有好处吗? - 将
pdfmake.min.js
替换为pdfmake.js
。 - 还有其他想法吗?
根据以前的经验,我发现以前缩小的Javascript会导致uglifier的一些问题。这可能与uglifier中的早期错误有关,如果它在相同的代码上运行多次,它会失败。
为了获得可靠的结果,请使用unminified pdfmake.js,这样uglifier应该没有问题。
此外,考虑到您的uglifier gem版本是从2014年开始的(请参阅https://github.com/lautis/uglifier/releases?after=v2.5.2),您应该考虑升级uglifier gem以避免其他问题。
感谢菲尔的回答。我可以确认它是由uglifier和最新的3.2
引起的将解决这个问题。在这个答案中,我会深入挖掘它。
我创建了一个新的Rails项目和进口pdfmake.min.js
的uglifier
版本我用2.5
这也将导致问题。我测试了从2.5
到3.2
的版本,发现3.1
修复了这个问题。我发现它将UglifyJS
更新为2.7
。我还通过配置gem与git ref
进行了测试,并验证了此更新解决了此问题。
总之,总是更新到最新版本。如果仍然不能解决问题,请将缩小的js替换为普通的js。
你使用的是什么版本的uglifier gem?偶尔的错误已经修复了。无论哪种方式,但我会在uglification之前使用plain pdfmake.js。过去我曾经遇到过类似的问题,你可能会在这里经历多次缩小比赛。 – Phil
Hi @Phil,我的uglifier gem的版本是2.5.0。我也在考虑纯pdfmake.js。 – Stephen
哦,这听起来有点老。在Rails 4.2项目中,我正在研究我的uglifier是3.2.0,我相信这是最新的。它对我来说工作正常,主要是未缩小的JS(一个简单的缩小,看起来很好)。可能值得在开发机器上进行镜头升级以查看。 – Phil