使用UglifyJS時,除非keep_fnames
設置爲true
,否則函數名稱會發生損壞。例如,下面的代碼打字原稿:UglifyJS - Mangle函數但保留Function.prototype.name
class Test {}
console.log(Test.name);
編譯爲JS爲:
function Test() {}
console.log(Test.name);
將變醜到:
function t() {}
console.log(t.name);
和輸出t
代替test
到控制檯。
有沒有一種方法(other than using keep_fnames
option)在uglification之後保留name
屬性? (我不想用keep_fnames:true
因爲它增加了集束大小相當多
可能的解決方案我想到:
- 編寫的WebPack插件硬編碼函數名
Test.name = 'Test'
,但這韓元作爲Function.prototype.name
是隻讀屬性; - 使用Typescript裝飾器,元數據和反射API,但
design:type
元數據不是爲類發射的,它只是爲屬性發射(我相信是因爲Function.prototype.name
存在,但我猜他們錯過了這個邊緣情況?)。
你可以編寫一個Webpack插件,用''Test「替換'Test.name'的實例嗎?類似於「DefinePlugin」的功能。 – CodingIntrigue
我想是的,但在這種情況下,我簡化了這個例子。在我真正的用例中,'.name'屬性是從作爲私有npm包編寫的外部庫中訪問的。 – user5365075
可能的重複https://stackoverflow.com/questions/46561116/angular4-component-name-doesnt-work-on-production – estus