我有一個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