2013-04-29 7 views
32

क्या सभी उपयोग किए गए लाइसेंस प्रिंट करने के लिए एनपीएम (या अन्य उपकरण) में कोई विकल्प है? मेरे पास एक प्रोजेक्ट है और मैं यह सुनिश्चित करना चाहता हूं कि मैं ऐसी लाइब्रेरी का उपयोग नहीं करता जो लाइसेंस के तहत है जिसका मैं उपयोग नहीं कर सकता।आउटपुट स्थापित node.js पुस्तकालयों के सभी लाइसेंस

संपादित करें: बाहर मिला कि कई डेवलपर्स package.json में लाइसेंस शामिल नहीं है, इसलिए मैं मैन्युअल रूप से "NPM डॉक्स पैकेज-नाम"

+1

पार्टी के लिए बहुत देर हो चुकी है लेकिन एनपीएम ग्रंट-लाइसेंस वास्तव में वही करता है जो आप चाहते हैं - यह मानते हुए गड़बड़ है या इसका उपयोग किया जाएगा;) –

उत्तर

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

का उपयोग कर कुछ सुधार इस्तेमाल कर सकता पता लगाने के लिए किया था, लेकिन यह काम करता है (कम से कम ओएसएक्स पर, लिनक्स पर काम करना चाहिए, खिड़कियों के बारे में कोई जानकारी नहीं है)।

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

अपडेट::

आप सभी मॉड्यूल के नाम देखने के लिए, यहां तक ​​कि उन अन्य मॉड्यूल के अंदर नेस्टेड चाहते हैं, तो निम्न कार्य (cred @robertklep करने के लिए, थोड़ा संशोधित आप की तरह कुछ देखना चाहिए अभी भी node_modules निर्देशिका के अंदर जब काम करने के लिए):

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

हालांकि कोई नेस्टेड मॉड्यूल नहीं दिखाएगा। कैसे 'node_modules -name package.json खोजें xargs grep ... '? – robertklep

+0

@robertklep सच है, मैं आपके संस्करण को उत्तर में जोड़ दूंगा। मेरा विचार था कि यदि लाइसेंस वायरल (जैसे जीपीएल) है, तो इसके आधार पर मॉड्यूल में एक संगत लाइसेंस होना चाहिए। फिर नेस्टेड मॉड्यूल की जांच करने की आवश्यकता नहीं होनी चाहिए? –

+0

मुझे नहीं पता कि @ वाधार द्वारा कौन से लाइसेंस का उपयोग नहीं किया जा सकता है, हालांकि मुझे लगता है कि जीपीएल की आपकी धारणा सही है। लेकिन एक एमआईटी-लाइसेंसीकृत मॉड्यूल एक जीपीएल-लाइसेंसीकृत मॉड्यूल को निर्भरता के रूप में सूचीबद्ध कर सकता है, और यदि एक विशिष्ट संस्करण जो आवश्यक है, तो मुझे लगता है कि यह एक नेस्टेड मॉड्यूल के रूप में स्थापित किया जाएगा। – 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); 
      }); 
     } 
    }); 
}); 

इस वसीयत उत्पादन प्रत्येक लाइसेंस नाम और प्रत्येक मॉड्यूल के लिए यूआरएल,

नोट: प्रोजेक्ट फ़ोल्डर में मार डाला जाना चाहिए और NPM स्थापित किया जाना चाहिए (npm install npm -g overkill लगता है, लेकिन इस NPM js lib है)

40

मेरे पास बिल्कुल वही आवश्यकता थी, और ऐसा करने के लिए एक नोड मॉड्यूल लिखा था। बेकार आत्म प्रचार मुझे पता है, लेकिन यह खुला स्रोत है और उम्मीद है कि यह आपकी समस्या को हल करने में मदद कर सकता है। अगर आपको कोई समस्या या सुझाव हैं तो मुझे बताएं।

अन्य उत्तरों पर अंतर यह है कि यह केवल पैकेज.जेसन लाइसेंस घोषणा का उपयोग नहीं करता है, लेकिन इस परियोजना में लाइसेंस और रीडेमे फाइलों में संभावित लाइसेंस जानकारी की तलाश करता है।

https://npmjs.org/package/nlf

आप का उपयोग npm install -g nlf

+3

'nlf' के बारे में सबसे अच्छा हिस्सा सीएसआई आउटपुट प्राप्त करने के लिए सीएलआई तर्क' -c' पास कर रहा है - इसलिए आप 'nlf -c -r 0> licenses.csv' चलाते हैं और आपको रूट-स्तरीय निर्भरताएं मिलेंगी लाइसेंस के प्रकार और उनके repos के लिंक के साथ। आपकी कानूनी टीम को देने के लिए सही आउटपुट :-) – arthurakay

+2

यह एक महान परियोजना है, @Iandotkelly साझा करने के लिए धन्यवाद। मेरी ज़रूरतों के लिए, मैंने सभी रिकर्सिव स्तरों को कवर करने के लिए 'nlf -c -r 20> लाइसेंस-alllevels.csv' कमांड का उपयोग किया। – AndyBean

7

सिर्फ एक बड़ी परियोजना के लिए यह किया करने के बाद स्थापित कर सकते हैं, मैं कह सकता हूँ यह पता चला है इस प्रक्रिया को सिर में दर्द की अधिक पूरी तरह से स्वचालित करने के लिए की तुलना में आपको लगता है हो सकता है। यह यहाँ सूचीबद्ध चाल से कुछ के साथ उनमें से कई को पाने के लिए आसान है, लेकिन NPM पैकेज लाइसेंस लगातार प्रकाशित नहीं कर रहे हैं, और प्रदर्शित कर सकते हैं

  • NPM package.json फ़ाइल में, या
  • README फ़ाइल में (कभी-कभी सिर्फ "एमआईटी लाइसेंस" जैसे नाम, और कभी-कभी किसी अनुभाग में पूर्ण लाइसेंस टेक्स्ट), या
  • एक अलग लाइसेंस या कॉपी फ़ाइल में।

इसके अतिरिक्त, आपको कभी-कभी यह जानने के लिए एक लाइसेंस पढ़ना पड़ता है कि यह कौन सा प्रसिद्ध ओपन सोर्स लाइसेंस है।

सबसे अच्छा उपकरण मैं जानता हूँ कि यह करने के लिए, कि (विपरीत अन्य उत्तर यहाँ से कुछ) इन सभी मामलों को शामिल किया गया licensecheck पैकेज है: https://github.com/marcello3d/node-licensecheck

यह सामान्य रूप में भी package.json पर लग रहा है लाइसेंस फाइलें, और ज्ञात लाइसेंस के खिलाफ एक हस्ताक्षर मैच करती है, इसलिए यह स्वचालित रूप से अधिक लाइसेंस को सटीक रूप से पहचानती है। यह लाइसेंस की मानक एसपीडीएक्स सूची (https://spdx.org/licenses/) के खिलाफ लाइसेंस "सामान्य" भी करता है।

अंत में, लाइसेंस चेक आपको अपने स्वयं के लाइसेंस.जेसन फ़ाइल में मैन्युअल रूप से सत्यापित करने के लिए आवश्यक शेष शेष पैकेज भी सहेजने देता है (क्योंकि आप अपने पैकेज को बदलने के लिए बाहरी रखरखाव पर भरोसा नहीं कर सकते हैं)।

एक साथ लिया गया, यह एक बहुत मजबूत समाधान है।

+2

लाइसेंस चेक मेरे लिए एक आकर्षण की तरह काम किया। –

0

पर एक नजर डालें, वहाँ package.json से लाइसेंस प्राप्त करने के लिए npm-license-checker है।

2

आप इस यह आप एक लिनक्स आधारित प्रणाली पर हैं की कोशिश कर सकते हैं:

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'

संबंधित मुद्दे