【发布时间】:2017-10-16 05:10:40
【问题描述】:
我有一个 rails 项目,其中包括一个 pdfmake js 插件。我将pdfmake.min.js文件放在assets\javascripts文件夹中,并添加到application.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编译造成的。详细一点,是使用uglifier时引起的:
相关源码:
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 暂存后的 application.js 中的代码
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?那里修复了偶尔出现的错误。不管怎样,我都会在丑化之前使用普通的 pdfmake.js。过去我曾在多次缩小时遇到过类似的问题,您可能会在这里遇到。
-
嗨@Phil,我的丑陋宝石的版本是2.5.0。我也在考虑使用普通的 pdfmake.js。
-
哦,这对我来说听起来有点老了。在我正在开发的 Rails 4.2 项目中,我的 uglifier 是 3.2.0,我相信它是最新的。它对我来说工作正常,主要是非缩小的 JS(一个简单的被缩小并且看起来很好)。可能值得在你的开发机器上升级一下。
-
@Phil 实际上,我将缩小的 js 替换为普通的,现在可以正常工作了。我找不到
uglifier错误地缩小缩小的 js 文件的原因,但它可能是一个解决方案。您可以将其作为答案。 -
我很高兴它对你有用。感谢您接受我的回答。
标签: javascript ruby-on-rails minify uglifyjs pdfmake