0

我有一個對象,我需要跟蹤REALLY BADLY,以及傳遞給調用者的調用和參數的父調用方。如何防止JS縮小刪除命名函數表達式的名稱?

這口井工程直至精縮:

var foo = { 
    FunctionToBeLogged: function GiveMeAName() { 
     console.log('> %s called from %s - args: %o', 
        arguments.callee.name, 
        arguments.callee.caller.name, 
        arguments.callee.caller.arguments); 
    } 
} 

var bar = { 
    A: function A(something) { 
    foo.FunctionToBeLogged('nothing', 12, true); 
    }, 
    B: function B(whatever, doesntMatter) { 
    foo.FunctionToBeLogged('nothing', 12, true); 
    } 
} 

bar.A(1.2, 'Fred', { }); // > GiveMeAName called from A - args: [1.2, "Fred", Object] 
bar.B('Barney', 42, false); // > GiveMeAName called from B - args: ["Barney", 42, false] 

縮小擺脫了這些名字和我的輸出變爲:

bar.A(1.2, 'Fred', { }); // > called from - args: [1.2, "Fred", Object] 
bar.B('Barney', 42, false); // > called from - args: ["Barney", 42, false] 

我真的不想去創建函數聲明和分配,因爲我有他們的噸(我繼承這個代碼與7,564 ...我可以很容易地運行一些正則表達式命名函數表達式。)

我能做些什麼來防止縮小器擺脫我的這些函數名稱?

+0

運行代碼un-minified ....?不要在生產機器上開發,也不要在開發機器上進行縮小。 – Ryan

+0

哈哈哈......對不起,我忘了說:我們可以將未經過粉刷的腳本部署到開發和集成環境,但是我們需要部署從我們的內部QA環境和後續階段開始縮小的所有JS腳本。我們需要繼續跟蹤這些呼叫到分段。 – fernandoespinosa

+0

你用什麼來縮小代碼? – JordanHendrix

回答

1

要做到這一點,你可以通過特定的名稱不能錯位,例如在UglifyJS:

爲了避免這種情況,你可以使用--reserved文件傳遞應包含名稱的文件名從重整

在該文件中,你將有你不想要的名單中排除改變,像這樣:

{ 
    "vars": [ "define", "require", ... ], 
    "props": [ "length", "prototype", ... ] 
} 

Uglify Mangle options docs...

相關問題