输出已安装的node.js库的所有许可证

有没有npm(或其他工具)打印所有使用的许可证的选项? 我有一个项目,我想确保我不使用一个我无法使用的许可证下的图书馆。

编辑:发现许多开发人员不包括package.json中的许可证,所以我不得不手动使用“npm docs package-name”

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

可以使用一些改进,但它的作品(至less在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" -- 

更新:

如果你希望看到所有模块的名字,甚至是那些嵌套在其他模块中的模块,那么下面的工作(声明@robertklep,略微修改,以便在node_modules目录内工作):

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

我有完全相同的要求,并写了一个节点模块来做到这一点。 我知道,无耻的自我推销,但它是开源的,希望它可以帮助解决你的问题。 如果您有任何问题或build议,请告诉我。

其他答案的区别在于它不仅仅使用package.json许可证声明,而是在项目中的许可证和自述文件中查找潜在的许可证信息。

https://npmjs.org/package/nlf

你可以使用npm install -g nlf进行npm install -g nlf

刚刚为一个大型项目完成了这个工作,我可以说这个过程比您想象的更让人头疼。 使用这里列出的一些技巧很容易得到许多人,但是NPM包许可证不是一致地发布的,并且可以出现

  • 在NPM package.json文件中,或者
  • 在README文件中(有时候只是名称,如“MIT许可证”,有时候是完整的许可证文本),或者
  • 在单独的LICENSE或COPYING文件中。

另外,您有时必须阅读许可证才能知道它与哪个着名的开源许可证相对应。

我知道这样做的最好的工具,(不像这里的其他答案)覆盖所有这些情况是licensecheck包: https : //github.com/marcello3d/node-licensecheck

它查看package.json以及常见的许可证文件,并且与已知许可证进行签名匹配,因此它可以自动准确地识别更多的许可证。 它还根据标准SPDX许可证列表(“ https://spdx.org/licenses/” )对许可证进行“规范化”。

最后,Licensecheck还允许您保存任何剩余的软件包,以便在自己的license.json文件中手动validation(因为您不能指望外部维护人员更改其软件包)。

综合起来,这是一个非常强大的解决scheme。

看看许可证报告或许可证检查器

我喜欢这个问题,并花时间为它写了一个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 -gnpm install npm -g听起来有点过分,但是这是npm js lib)

你可以试试这个,你在一个基于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', 

如果您使用的是Atom,则有npm-license-checker来从package.json获取许可证。

纱线也有这个命令, yarn licenses list

为了我的目的,下面的命令让我足够接近:

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