0

Ich habe diese Funktion auf ein Objekt, das ich WIRKLICH SCHLECHT folgen muss, zusammen mit dem übergeordneten Aufrufer des Aufrufs und Argumente an den Aufrufer übergeben.Wie verhindert man, dass die JS-Verkleinerung Namen von named-function-Ausdrücken entfernt?

Das funktioniert gut, bis minimierte:

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] 

Minifizierung wird der diesen Namen zu befreien und meine Ausgabe wird:

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

ich wirklich nicht wollen, zu gehen und Funktionsdeklarationen erstellen und Zuordnungen, weil ich TONEN von ihnen habe (ich erbte diesen Code mit 7.564 ... und ich kann leicht eine Regex-Unterfunktion ausführen, um die Funktionsausdrücke zu benennen.)

Was kann ich tun, um zu verhindern, dass der Minifier meine Funktionsnamen entfernt?

+0

Führen Sie den Code un-minified ....? Entwickeln Sie nicht auf Produktionsmaschinen und minimieren Sie nicht auf Entwicklungsmaschinen. – Ryan

+0

Hahaha .. Entschuldigung, ich habe vergessen zu sagen: Wir können unminimierte Skripte in Dev- und Integrationsumgebungen bereitstellen, aber wir müssen alle JS-Skripte implementieren, die aus unserer internen QA-Umgebung und den nachfolgenden Phasen minimiert werden. Wir müssen diese Aufrufe bis zu Staging verfolgen. – fernandoespinosa

+0

Was verwenden Sie, um den Code zu minimieren? – JordanHendrix

Antwort

1

Um dies zu erreichen Sie bestimmen Namen passieren können nicht zum Beispiel in UglifyJS verstümmelt werden:

Um das zu vermeiden, können Sie --reserved-Datei verwenden, um einen Dateinamen zu übergeben, die die Namen enthalten sollen

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

: von Mangeln

Sie eine Liste der Namen würde wollen Sie nicht werden in dieser Datei ausgeschlossen werden wie so geändert