npm(或其他工具)中是否有选项可以打印所有已使用的许可证? 我有一个项目,我想确保我不使用我无法使用的许可证库。
编辑:发现许多开发人员没有在package.json中包含许可证,所以我必须手动找到“npm docs package-name”答案 0 :(得分:49)
我有完全相同的要求,并编写了一个节点模块来执行此操作。我知道无耻的自我推销,但它是开源的,希望它可以帮助你解决问题。如果您有任何问题或建议,请告诉我。
与其他答案的不同之处在于,它不仅使用package.json许可声明,而且还在项目的许可证和自述文件中查找潜在的许可证信息。
您可以使用npm install -g nlf
答案 1 :(得分:18)
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"
--
<强>更新强>
如果你希望看到所有模块的名称,甚至是那些嵌套在其他模块中的模块的名称,以下工作(相信@robertklep,略微修改为在node_modules目录内时仍然有效):
find * -name package.json | xargs grep '"license[s]*"' -A 3
答案 2 :(得分:9)
Yarn也有这方面的命令。 yarn licenses list
呈现短输出,yarn licenses generate-disclaimer
将所有实际许可文本呈现为标准输出(适用于免责声明,如选项所暗示的那样)。
如果您想省略devDependencies
:
NODE_ENV=production yarn licenses list
就我的目的而言,以下命令让我足够接近:
yarn licenses list | grep License | \
grep -vE 'MIT|ISC|WTFPL|BSD|Apache|Unlicense|CC-BY|Public Domain'`
答案 3 :(得分:7)
刚刚为一个大项目做了这个,我可以说事实证明这个过程比你想象的更充分地自动化。使用此处列出的一些技巧很容易获得其中的许多技巧,但NPM包许可证不会一致地发布,并且可以出现
此外,您有时必须阅读许可证,以告知它对应的哪个着名的开源许可证。
我知道这样做的最佳工具(与此处的其他一些答案不同)涵盖所有这些案例是 licensecheck 包: https://github.com/marcello3d/node-licensecheck
它查看package.json以及常见许可证文件,并对已知许可证进行签名匹配,因此它可以自动准确识别更多许可证。它也&#34;标准化&#34;针对标准SPDX许可证列表(https://spdx.org/licenses/)的许可证。
最后,Licensecheck还允许您在自己的license.json文件中保存手动验证所需的任何剩余软件包(因为您不能指望外部维护者更改其软件包)。
总之,这是一个非常强大的解决方案。
答案 4 :(得分:7)
答案 5 :(得分: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(npm install npm -g
听起来有点矫枉过正,但这是npm js lib)
答案 6 :(得分: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',
答案 7 :(得分:0)
如果您使用的是Atom,则可以npm-license-checker从package.json
获取许可。
答案 8 :(得分:0)
如果要从目录或其子目录中获取所有许可证,则可以使用NPM许可证搜寻器https://www.npmjs.com/package/npm-license-crawler。对我来说这是最好的解决方案