2013-04-29 25 views
32

Có tùy chọn nào trong npm (hoặc công cụ khác) để in tất cả giấy phép đã sử dụng không? Tôi có một dự án và tôi muốn đảm bảo rằng tôi không sử dụng thư viện dưới giấy phép tôi không thể sử dụng.Xuất tất cả giấy phép của thư viện node.js đã cài đặt

EDIT: Tìm thấy ra rằng nhiều nhà phát triển không bao gồm giấy phép trong package.json, vì vậy tôi đã phải tìm ra bằng tay sử dụng "tài liệu NPM package-name"

+1

Ít muộn cho bữa tiệc nhưng npm grunt-giấy phép thực hiện chính xác những gì bạn muốn - Điều này giả mạo grunt là hoặc sẽ được sử dụng;) –

Trả lời

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

có thể sử dụng một số cải tiến, nhưng nó hoạt động (ít nhất là trên osx, nên làm việc trên Linux, không có ý tưởng về cửa sổ). Bạn sẽ thấy một cái gì đó như:

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" 
-- 

Cập nhật:

Nếu bạn muốn xem tên của tất cả các mô-đun, ngay cả những người lồng vào bên trong mô-đun khác, các công trình sau đây (cred để @robertklep, chút thay đổi vẫn làm việc khi ở trong thư mục node_modules):

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

Sẽ không hiển thị bất kỳ mô-đun lồng nhau mặc dù. Làm thế nào về 'tìm node_modules -name package.json | xargs grep ... '? – robertklep

+0

@robertklep true, tôi sẽ thêm biến thể của bạn vào câu trả lời. Tôi nghĩ rằng nếu một giấy phép là virus (ví dụ GPL), các mô-đun tùy thuộc vào nó phải có giấy phép tương thích. Sau đó, không cần phải kiểm tra các mô-đun lồng nhau? –

+0

Tôi không biết những gì giấy phép không thể được sử dụng bởi @whadar, mặc dù tôi nghĩ rằng giả định của bạn về GPL là chính xác. Nhưng một mô-đun được cấp phép của MIT có thể liệt kê một mô-đun được cấp phép GPL làm phụ thuộc và nếu một phiên bản cụ thể được yêu cầu, nó sẽ được cài đặt như một mô-đun lồng nhau mà tôi nghĩ. – robertklep

3

tôi thích câu hỏi, và mất thời gian để viết một kịch bản nodejs cho nó:

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); 
      }); 
     } 
    }); 
}); 

này sẽ ra mỗi tên giấy phép và url cho mỗi mô-đun,

LƯU Ý: phải được thực thi trong thư mục dự án và NPM phải được cài đặt (npm install npm -g âm thanh quá mức cần thiết nhưng đây là NPM js lib)

40

Tôi đã có chính xác yêu cầu tương tự, và đã viết một mô-đun nút để làm điều này. Tự quảng cáo không biết xấu hổ Tôi biết, nhưng nó là nguồn mở và hy vọng nó có thể giúp giải quyết vấn đề của bạn. Hãy cho tôi biết nếu bạn có bất kỳ vấn đề hoặc đề xuất nào.

Sự khác biệt so với các câu trả lời khác là nó không chỉ sử dụng khai báo giấy phép package.json, mà còn tìm kiếm thông tin giấy phép tiềm năng trong giấy phép và tệp readme trong dự án.

https://npmjs.org/package/nlf

Bạn có thể cài đặt sử dụng npm install -g nlf

+3

Phần tốt nhất về 'nlf' là chuyển đối số CLI' -c' để nhận đầu ra CSV - vì vậy bạn chạy 'nlf -c -r 0> licenses.csv' và bạn sẽ nhận được tất cả các phụ thuộc cấp gốc với các loại giấy phép và liên kết đến repos của họ. Sản lượng hoàn hảo để cung cấp cho nhóm pháp lý của bạn :-) – arthurakay

+2

Đây là một dự án tuyệt vời, cảm ơn bạn đã chia sẻ @iandotkelly. Đối với các nhu cầu của tôi, tôi đã sử dụng lệnh 'nlf -c -r 20> license-alllevels.csv' để bao quát tất cả các mức đệ quy. – AndyBean

7

Vừa làm điều này cho một dự án lớn, tôi có thể nói nó quay ra quá trình này là nhiều hơn một đau đầu để tự động hóa hoàn toàn hơn bạn nghĩ. Thật dễ dàng để có được nhiều trong số họ với một số các thủ thuật được liệt kê ở đây, nhưng giấy phép gói NPM không được công bố một cách nhất quán, và có thể xuất hiện

  • Trong tập tin package.json NPM, hoặc
  • Trong tập tin README (đôi khi chỉ là tên, như "giấy phép MIT" và đôi khi là văn bản giấy phép đầy đủ trong một phần) hoặc
  • Trong một tệp LICENSE hoặc COPYING riêng biệt.

Ngoài ra, đôi khi bạn phải đọc giấy phép để cho biết giấy phép nguồn mở nổi tiếng nào tương ứng.

Các công cụ tốt nhất mà tôi biết để làm được điều này, rằng (không giống như một số các câu trả lời khác ở đây) bao gồm tất cả những trường hợp này là licensecheck gói: https://github.com/marcello3d/node-licensecheck

Nó nhìn vào package.json cũng như chung các tệp giấy phép và so khớp chữ ký với các giấy phép đã biết, vì vậy nó tự động nhận ra nhiều giấy phép hơn. Nó cũng "chuẩn hóa" giấy phép chống lại danh sách giấy phép SPDX tiêu chuẩn (https://spdx.org/licenses/).

Cuối cùng, Licensecheck cũng cho phép bạn lưu bất kỳ gói còn lại nào bạn cần để xác minh thủ công trong tệp license.json của riêng bạn (vì bạn không thể tin cậy vào người duy trì bên ngoài để thay đổi gói của họ).

Kết hợp với nhau, đây là một giải pháp khá mạnh mẽ.

+2

Licensecheck làm việc như một sự quyến rũ đối với tôi. –

0

Nếu bạn đang sử dụng Atom, có npm-license-checker để có được giấy phép từ package.json.

2

Bạn có thể thử nó này, bạn đang ở trên một hệ thống dựa trên Linux:

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

Bạn sẽ có một cái gì đó như thế này:

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

Sợi có một lệnh cho điều này là tốt, yarn licenses list

Vì mục đích của tôi, lệnh sau đã cho tôi đủ gần:

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

Các vấn đề liên quan