输出已安装的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许可证声明,而是在项目中的许可证和自述文件中查找潜在的许可证信息。
你可以使用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 -g
( npm 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'