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

时间:2013-04-29 09:04:05

标签: node.js npm

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

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

9 个答案:

答案 0 :(得分:49)

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

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

https://npmjs.org/package/nlf

您可以使用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包许可证不会一致地发布,并且可以出现

  • 在NPM package.json文件中,或
  • 在README文件中(有时只是名称,例如&#34; MIT许可证&#34;,有时是部分中的完整许可证文本),或
  • 在单独的LICENSE或COPYING文件中。

此外,您有时必须阅读许可证,以告知它对应的哪个着名的开源许可证。

我知道这样做的最佳工具(与此处的其他一些答案不同)涵盖所有这些案例是 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-checkerpackage.json获取许可。

答案 8 :(得分:0)

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