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

wha*_*dar 49 node.js npm

在npm(或其他工具)中是否有选项可以打印所有使用过的许可证?我有一个项目,我想确保我不使用我无法使用的许可证库.

编辑:发现许多开发人员没有在package.json中包含许可证,所以我必须手动找到"npm docs package-name"

ian*_*lly 52

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

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

https://npmjs.org/package/nlf

你可以使用安装 npm install -g nlf

  • 关于`nlf`的最好的部分是传递CLI参数`-c`来获取CSV输出 - 所以你运行`nlf -c -r 0> licenses.csv`你将获得所有的根级依赖关系许可证类型和他们的回购链接.给您的法律团队的完美输出:-) (4认同)
  • 这是一个很棒的项目,感谢分享@iandotkelly.根据我的需要,我使用命令`nlf -c -r 20> licenses-alllevels.csv`来覆盖所有递归级别. (3认同)

And*_*ren 19

cd {project}/node_modules
ls | sed 's/$/\/package.json/' | xargs grep '"license[s]*"' -A 3
Run Code Online (Sandbox Code Playgroud)

可以使用一些改进,但它的工作原理(至少在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"
--
Run Code Online (Sandbox Code Playgroud)

更新:

如果你想看到所有模块的名称,甚至是那些嵌套在其他模块中的模块,下面的工作原理(@robertklep,稍微修改为在node_modules目录内部时仍然有效):

find * -name package.json | xargs grep '"license[s]*"' -A 3
Run Code Online (Sandbox Code Playgroud)


jst*_*aab 13

纱线也有这个命令.yarn licenses list呈现短输出,yarn licenses generate-disclaimer将所有实际许可文本呈现给标准输出(适用于免责声明,如选项所暗示的那样).


jle*_*evy 8

刚刚为一个大型项目做了这个,我可以说这个过程比你想象的要充分自动化更令人头痛.使用此处列出的一些技巧很容易获得其中许多,但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文件中手动验证所需的任何剩余包(因为您不能指望外部维护者更改其包).

总之,这是一个非常强大的解决方案.