2013-04-29 2 views
32

Есть ли опция в npm (или другом инструменте) для печати всех используемых лицензий? У меня есть проект, и я хочу убедиться, что я не использую библиотеку, которая находится под лицензией, которую я не могу использовать.Вывести все лицензии установленных библиотек node.js

EDIT: Найдено, что многие разработчики не включают в себя лицензию на package.json, так что я должен был выяснить, вручную с помощью «имя-пакета НПМ DOCS»

+1

Немного поздно вечеринке, но npm grunt-license делает именно то, что вы хотите - это предполагает, что ворчит или будет использоваться;) –

ответ

16
cd {project}/node_modules 
ls | sed 's/$/\/package.json/' | xargs grep '"license[s]*"' -A 3 

Может использовать некоторые улучшения, но он работает (по крайней мере, на osx, должен работать на Linux, не иметь понятия о Windows). Вы должны увидеть что-то вроде:

grunt/package.json: "licenses": [ 
grunt/package.json- { 
grunt/package.json-  "type": "MIT", 
grunt/package.json-  "url": "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT" 
-- 
grunt-contrib-concat/package.json: "licenses": [ 
grunt-contrib-concat/package.json- { 
grunt-contrib-concat/package.json-  "type": "MIT", 
grunt-contrib-concat/package.json-  "url": "https://github.com/gruntjs/grunt-contrib-concat/blob/master/LICENSE-MIT" 
-- 

Update:

Если вы хотите, чтобы увидеть название всех модулей, даже те, вложенными в других модулях, следующие работы (кредите к @robertklep, слегка изменен по-прежнему работать, когда внутри каталога node_modules):

find * -name package.json | xargs grep '"license[s]*"' -A 3 
+0

Хотя бы не отображали вложенные модули. Как насчет 'find node_modules -name package.json | xargs grep ... '? – robertklep

+0

@robertklep true, я добавлю ваш вариант к ответу. Я думал, что если лицензия является вирусной (например, GPL), модули в зависимости от нее должны иметь совместимую лицензию. Тогда не нужно ли проверять вложенные модули? –

+0

Я не знаю, какие лицензии не могут использоваться @whadar, хотя я думаю, что ваше предположение о GPL правильное. Но MIT-лицензированный модуль может отображать GPL-лицензированный модуль в качестве зависимости, и если я полагаю, что определенная версия, которая требуется, будет установлена ​​как вложенный модуль. – robertklep

3

мне понравился вопрос, и нашел время, чтобы написать nodejs сценарий для него:

var npm = require('npm'); 
npm.load(process.config,function(err){ 
    npm.list(function(err,deps){ 
     var names = Object.keys(deps.dependencies); 
     for(var i in names){ 
      var depen = deps.dependencies[names[i]]; 
      console.log('Licenses for :',names[i]); 
      depen.licenses.forEach(function(license,i){ 
       console.log('License #'+(i+1)); 
       console.log('- Title:',license.type); 
       console.log('- Url:\t',license.url); 
      }); 
     } 
    }); 
}); 

это будет выводить каждое имя лицензии и URL для каждого модуля,

ПРИМЕЧАНИЕ: должны быть выполнены в папке проекта и НПМ должны быть установлены (npm install npm -g звуки излишеством, но это НПМ JS Lib)

40

У меня было точно такое же требование, и я написал модуль узла для этого. Беспокойное самоопределение, которое я знаю, но оно с открытым исходным кодом и надеется, что оно поможет решить вашу проблему. Сообщите мне, есть ли у вас какие-либо вопросы или предложения.

Разница по сравнению с другими ответами заключается в том, что она не просто использует объявление лицензии package.json, но ищет потенциальную информацию о лицензии в файлах лицензий и readme в проекте.

https://npmjs.org/package/nlf

Вы можете установить с помощью npm install -g nlf

+3

Лучшая часть про 'nlf' передаёт аргумент CLI' -c' для получения CSV-вывода, поэтому вы запускаете 'nlf -c -r 0> license.csv', и вы получите все зависимости от корневого уровня с типами лицензий и ссылками на их репозитории. Отличный результат, чтобы дать вашей юридической команде :-) – arthurakay

+2

Это отличный проект, спасибо за то, что вы поделились с ним @iandotkelly. Для моих нужд я использовал команду 'nlf -c -r 20> license-alllevels.csv' для покрытия всех рекурсивных уровней. – AndyBean

7

Только что сделал это для большого проекта, я могу сказать, что это, оказывается, этот процесс больше головной боли, чтобы полностью автоматизировать, чем вы могли бы подумать. Это легко получить многие из них с некоторыми из трюков, перечисленных здесь, но лицензия NPM пакета не публикуется последовательно, и может появиться

  • В package.json файл НПМ или
  • В файле README (иногда просто имя, например «Лицензия MIT», а иногда и полный текст лицензии в разделе), или
  • В отдельном файле LICENSE или COPYING.

Кроме того, вам иногда необходимо ознакомиться с лицензиями, чтобы указать, какая из известных лицензий с открытым исходным кодом соответствует.

Лучший инструмент, который я знаю, как это сделать, что (в отличие от некоторых других ответов здесь) охватывает все эти случаи является licensecheck пакет: https://github.com/marcello3d/node-licensecheck

Он смотрит на package.json, а также общие лицензионных файлов и соответствует ли подпись с известными лицензиями, поэтому он автоматически распознает больше лицензий. Он также «нормализует» лицензии в отношении стандартного списка лицензий SPDX (https://spdx.org/licenses/).

И наконец, Licensecheck также позволяет сохранять любые оставшиеся пакеты, необходимые для проверки вручную в вашем собственном файле license.json (так как вы не можете рассчитывать на внешний файл поддержки, чтобы изменить свой пакет).

Взятый вместе, это довольно надежное решение.

+2

Licensecheck работал как прелесть для меня. –

2

Вы можете попробовать это его вы в системе на платформе Linux:

npm list -g --depth=0 | awk '{print $2}' | xargs -i npm view {} | grep license 

Вы будете иметь что-то вроде этого:

license: 'MIT', 
    license: 'MIT', 
    license: 'MIT', 
    license: 'BSD', 
    license: 'MIT', 
    license: 'MIT', 
    license: 'BSD-2-Clause', 
    license: 'MIT', 
    ..................... 
    ..................... 
    ..................... 
    license: 'BSD-2-Clause', 
2

Пряжа имеет команду для этого, как хорошо, yarn licenses list

Для моих целей следующая команда привлекла меня достаточно близко:

yarn licenses list | grep License | grep -v 'MIT\|ISC\|WTFPL\|BSD\|Apache\|Unlicense\|CC-BY\|Public Domain'

Смежные вопросы