61

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

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

4

10 回答 10

64

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

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

https://npmjs.org/package/nlf

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

于 2013-07-16T13:32:03.727 回答
22
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
于 2013-04-29T09:54:27.443 回答
21

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'`
    
于 2017-12-06T23:17:40.020 回答
13

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

于 2015-02-17T04:15:34.623 回答
10

刚刚为一个大型项目完成了这项工作,我可以说这个过程完全自动化比你想象的更令人头疼。使用此处列出的一些技巧很容易获得其中的许多,但是 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 文件中(因为您不能指望外部维护者更改他们的包)。

综上所述,这是一个非常强大的解决方案。

于 2014-09-24T02:02:48.377 回答
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 库)

于 2013-04-29T12:12:29.123 回答
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',
于 2016-11-28T18:19:36.217 回答
1

如果您想从一个目录或其子目录中获取所有许可证,您可以使用 NPM License Crawler https://www.npmjs.com/package/npm-license-crawler。这对我来说是最好的解决方案

于 2020-07-17T11:48:35.567 回答
0

如果您使用的是 Atom,则可以使用npm-license-checkerpackage.json.

于 2016-04-10T21:58:56.250 回答
0

快速简便的检查方法:

npx license-checker --summary

更多信息的重要来源: https ://medium.com/@fokusman/the-easiest-way-to-check-all-your-npm-dependency-licenses-753075ef1d9d

于 2021-11-13T02:46:03.100 回答