Подтвердить что ты не робот

Javascript minification, который удаляет лицензии?

Javascript minification обычно удаляет все комментарии из источника. Это означает, что лицензионная информация также удаляется.

Если я запускаю большой сайт, и я хочу соблюдать лицензии, значит ли это, что я не могу использовать автоматическую мини-фильтрацию? Нет возможности "сохранить первый комментарий, но не другие" "правильно?

Я спрашиваю, потому что довольно большая компания использовала какой-то код, который я написал, и не включила мою лицензию (MIT), но прежде чем я все разоблачу, я хочу поставить себя на свои места.

изменить:
Похоже, что автору бремя лежит на том, чтобы я прокомментировал лицензию таким образом (см. Ответы), что она не удаляется во время минимизации. Я в порядке с этим первым, а затем поднимаю вонь, если моя лицензия еще удалена

4b9b3361

Ответ 1

Это классический случай "это зависит".

Это зависит от minifier.. Например, UglifyJS уйдет в исходный блок комментариев в файл, если вы специально не укажете ему флаг -nc. Другие (например, Google Closure Compiler) ищут специальную аннотацию (например, @license или @preserve). Некоторые уважают "громкие" комментарии (например, /*! ... */), а другие нет.

Это зависит от того, как вы минимизируете.. Некоторые организации агрессивно минимизируют и объединяют все, чтобы выжать каждый байт. Другие добавляют лицензии в исходный контроль и "оставляют их" во время минирования. Другие применяют файлы лицензий после того, как все было объединено вместе.

В некоторых случаях может быть легко отказаться от лицензии в своих производственных сборках, особенно если они агрессивно объединяют каждую библиотеку, которую они используют, в один JS файл. Возможно, они даже не знают, что они это делают. Ваш лучший выбор здесь, вероятно, просто для того, чтобы протянуть руку и попросить их убедиться, что они соблюдают условия лицензии и оставляют там текст лицензии - они могут даже не осознавать, что они это делают.

Ответ 3

Компилятор Google Closure поддерживает @preserve и @license аннотации, которые сообщают ему оставить комментарий:

/**
 * @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 поддерживает параметр командной строки, --comments, который принимает регулярное выражение. Любые комментарии, соответствующие регулярному выражению, будут сохранены на выходе.

Другие ответы показали, что другие minifiers также поддерживают эту функцию. Вам нужно будет прочитать документацию для выбранного вами minifier, чтобы определить точный синтаксис/метод, который будет использоваться в вашем собственном случае.

Ответ 5

Информация о лицензии может быть сохранена. Например, компрессор YUI может это сделать:

Комментарии в стиле С, начинающиеся с /*! сохраняются. Это полезно в комментариях, содержащих информацию об авторских правах/лицензии.

(Документация)

Ответ 6

Это зависит от вашего инструмента для минимизации

/** Notice 
  *
  *
**/

или

/*!
 *
 *
 */

Посмотрите на документацию по инструменту

Ответ 7

Это зависит от используемого инструмента minifier/API. Хотя важные комментарии могут быть оставлены на выходе minifier, если инструмент поддерживает его. Ниже приведен формат важных комментариев

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

Следуя простому онлайн-инструменту, который можно использовать для минимизации кода JavaScript, который я нашел, сохраняет важные комментарии:

http://utilninja.com/Computing/JavascriptMinifier

Ответ 8

Несколько лет спустя, но...

За исключением minifiers, который устраняет мертвый код, вы можете кодировать ссылку на лицензию в том, что не является комментарием с префиксом пространства имен.

Для JS что-то вроде:

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

Для CSS что-то вроде:

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

В качестве альтернативы вы можете скопировать всю лицензию. Могли бы также добавить console.out для JS, чтобы распечатать его на консоли, но это может быть переполнено.