我有一个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
。 - 还有其他想法吗?
你使用的是什么版本的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