2013-07-04 9 views
13

La minifrazione Javascript rimuoverà generalmente tutti i commenti dalla fonte. Ciò significa che vengono rimosse anche le informazioni sulla licenza.minification javascript che rimuove le licenze?

Se eseguo un sito di grandi dimensioni e desidero rispettare le licenze, significa che non è possibile utilizzare la minifrazione automatica? Non c'è alcuna opzione per "preservare il primo commento, ma non gli altri " giusto?

Chiedo perché una società piuttosto grande ha utilizzato un codice che ho scritto e non ha incluso la mia licenza (MIT), ma prima che mi arrabbi, voglio mettermi nei loro panni.

modificare:
Sembra che come l'autore l'onere è su di me per commentare la licenza in modo tale (vedi le risposte) che non venga rimosso durante la minimizzazione. Sto bene a farlo prima, e quindi a sollevare una puzza se la mia licenza è ancora rimossa

risposta

7

Si tratta di un classico caso di " dipende".

Dipende dal minificatore. Ad esempio UglifyJS lascerà il blocco di commento iniziale in un file a meno che non lo specifichi specificamente con il flag -nc. Altri (come il Closure Compiler di Google) cercano un'annotazione speciale (ad es., @license o @preserve). Alcuni rispettano i commenti "rumorosi" (ad es., /*! ... */) mentre altri no.

Dipende da come si minimizza. Alcune organizzazioni stanno minificando e concatenando in modo aggressivo tutto per spremere ogni byte. Altri stanno aggiungendo le licenze nel controllo del codice sorgente e "lasciandoli entrare" durante il minifying. Altri stanno applicando i file di licenza dopo il tutto è stato concatenato insieme.

Può essere facile per alcuni luoghi rilasciare una licenza nei loro build di produzione, specialmente se concatenano in modo aggressivo ogni libreria che usano in un singolo file JS. Forse non sanno nemmeno che lo stanno facendo. La tua migliore scommessa qui è probabilmente quella di allungare la mano e chiedere loro di assicurarsi che rispettino i termini della licenza e lascino lì il testo della licenza - potrebbero anche non rendersi conto che lo stanno facendo.

6

Google Closure Compiler supporta @preserve and @license annotations che dica così almeno il commento:

/** 
* @preserve Copyright 2009 SomeThirdParty. 
* Here is the full license text and copyright 
* notice for this file. Note that the notice can span several 
* lines and is only terminated by the closing star and slash: 
*/ 

UglifyJS supporta un'opzione della riga di comando, --comments, che accetta una regex. Eventuali commenti corrispondenti alla regex verranno conservati nell'output.

Altre risposte hanno dimostrato che anche altri minificatori supportano questa funzione. Dovrai leggere la documentazione del minificatore scelto per determinare la sintassi esatta/tecnica da utilizzare nel tuo caso.

+0

L'esempio di formattazione aiuta.Ho avuto la parte '@ license' alla fine del commento, e mi è stato lasciato un commento vuoto nel file minified. Sembra che Closure manterrà ogni cosa _after_ l'annotazione '@ license'. –

1

Le informazioni sulla licenza possono essere conservate. Ad esempio, YUI Compressor può farlo:

commenti in stile C inizia con/*! sono conservati Questo è utile con commenti contenenti informazioni sul copyright/licenza.

(Documentation)

0

Dipende del vostro strumento Minimizzando

/** Notice 
    * 
    * 
**/ 

o

/*! 
* 
* 
*/ 

Guardate la documentazione strumento

+2

Ma come sviluppatore non hai il controllo o la conoscenza degli strumenti utilizzati da chi usa il tuo codice. – HBP

0

Dipende dallo strumento minificatore/API utilizzata. Sebbene i commenti importanti possano essere lasciati nell'output del minificatore se lo strumento lo supporta. Di seguito è riportato il formato per commenti importanti

/*! 
* Your comment...1 
* ...... 
* Your comment...n 
*/ 

Seguendo semplice strumento on-line che possono essere utilizzati per Minimizza JavaScript codice, che ho trovato conserva le commenti importanti:

http://utilninja.com/Computing/JavascriptMinifier

0

Alcuni anni dopo, ma ...

Ad eccezione dei minificatori che eliminano il codice guasto, è possibile codificare un riferimento a licenza in qualcosa che non è un commento con un prefisso namespace.

Per JS qualcosa del genere;

var NS_LICENSE_URL = "Cool Inc. - Apache 2.0 - http://github.com/nfisher/cooljs/LICENSE.txt"; 

Per CSS qualcosa del genere;

.ns_license_url { 
    content: "Cool Inc. - Apache 2.0 - http://github.com/nfisher/cooljs/LICENSE.txt"; 
} 

In alternativa si potrebbe copiare l'intera licenza. Potrebbe anche aggiungere un Console.Out per JS stamparlo alla console, ma che potrebbe essere oltrepassare.

Problemi correlati