npm(或其他工具)中是否有打印所有使用过的许可证的选项?我有一个项目,我想确保我不使用我无法使用的许可证下的库。
编辑:发现许多开发人员没有在 package.json 中包含许可证,所以我不得不使用“npm docs package-name”手动查找
我有完全相同的要求,并编写了一个节点模块来做到这一点。我知道无耻的自我推销,但它是开源的,希望它可以帮助解决您的问题。如果您有任何问题或建议,请告诉我。
与其他答案的不同之处在于,它不仅使用 package.json 许可证声明,而且在项目的许可证和自述文件中查找潜在的许可证信息。
您可以使用安装npm install -g nlf
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
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'`
刚刚为一个大型项目完成了这项工作,我可以说这个过程完全自动化比你想象的更令人头疼。使用此处列出的一些技巧很容易获得其中的许多,但是 NPM 包许可证的发布不一致,并且可能会出现
此外,有时您必须阅读许可证才能知道它对应于哪个著名的开源许可证。
我知道的最好的工具(与此处的其他一些答案不同)涵盖所有这些情况是licensecheck包: https ://github.com/marcello3d/node-licensecheck
它查看 package.json 以及常见的许可证文件,并与已知许可证进行签名匹配,因此它可以准确地自动识别更多许可证。它还根据标准 SPDX 许可证列表 ( https://spdx.org/licenses/ )“规范化”许可证。
最后,Licensecheck 还允许您将需要手动验证的任何剩余包保存在您自己的 license.json 文件中(因为您不能指望外部维护者更改他们的包)。
综上所述,这是一个非常强大的解决方案。
我喜欢这个问题,并花时间为它编写了一个 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 库)
您可以在基于 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',
如果您想从一个目录或其子目录中获取所有许可证,您可以使用 NPM License Crawler https://www.npmjs.com/package/npm-license-crawler。这对我来说是最好的解决方案
如果您使用的是 Atom,则可以使用npm-license-checker从package.json
.
快速简便的检查方法:
npx license-checker --summary
更多信息的重要来源: https ://medium.com/@fokusman/the-easiest-way-to-check-all-your-npm-dependency-licenses-753075ef1d9d