node.js - 如何计算NodeJS项目中npm依赖使用的百分比?

标签 node.js npm dependencies

有没有办法计算我的项目 (package.json) 中定义的 npm 依赖项实际触发和使用了多少行代码,无论稍后在项目中如何导入该依赖项(整个库还是其中的一部分)?

我想要实现的是看看某个依赖项是否值得在我拥有的某个相当大的项目中安装,例如,如果只使用了 1% 的库,那么最好只写这几个我自己的代码行而不是依赖整个库及其依赖项。

最佳答案

我找到了一个解决方案,涉及一些小技巧,但效果很好。

这个想法是使用代码覆盖率工具并用它来检查 node_modules除了您的代码之外,也一样。

nyc似乎是一个流行的代码覆盖率模块,所以我继续安装它:npm install -g nyc

我使用 2 个依赖项创建了一个小示例:

index.js

const mkdirp = require('mkdirp')
const ejs = require('ejs')

ejs.render('test');
mkdirp('.');

正在运行nyc node index.js只给出了index.js的覆盖范围,这不是我们想要的:

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |      100 |      100 |      100 |      100 |                   |
 index.js |      100 |      100 |      100 |      100 |                   |
----------|----------|----------|----------|----------|-------------------|

看起来像nyc不会下降到node_modules并且没有办法配置它来这样做。这个问题也在他们的 Github 存储库中提出:Include certain node modules #833
幸运的是,有人给出了解决方法:手动修改test-exclude ,nyc 的依赖项。

这就是我设法让它工作的方法:

  • 查找 nyc 的全局安装文件夹(我的是:C:\Users\mihai\AppData\Roaming\npm\node_modules\nyc)

  • 在此文件夹中,转到 node_modules\test-exclude并编辑index.js

  • 找到这个数组:

    exportFunc.defaultExclude = [
      ...
      '**/node_modules/**'
    ]
    

    修改'**/node_modules/**''**/nyc/node_modules/**'

  • 注释掉这些行:

      if (this.exclude.indexOf('**/node_modules/**') === -1) {
         this.exclude.push('**/node_modules/**')
      }
    

现在一切都已设置,我们可以运行 nyc node index.js再次:

----------------------------|----------|----------|----------|----------|-------------------|
File                        |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------------------------|----------|----------|----------|----------|-------------------|
All files                   |    42.75 |    29.34 |    40.48 |    43.03 |                   |
 myapp                      |      100 |      100 |      100 |      100 |                   |
  index.js                  |      100 |      100 |      100 |      100 |                   |
 myapp/node_modules/ejs/lib |    42.37 |     28.5 |    36.11 |    42.37 |                   |
  ejs.js                    |     42.2 |    29.32 |    44.44 |     42.2 |... 06,910,911,912 |
  utils.js                  |    44.44 |    11.11 |    11.11 |    44.44 |... 42,156,159,162 |
 myapp/node_modules/mkdirp  |    41.07 |    33.33 |    66.67 |    43.14 |                   |
  index.js                  |    41.07 |    33.33 |    66.67 |    43.14 |... 87,90,92,93,97 |
----------------------------|----------|----------|----------|----------|-------------------|

注意 ejs.js 的覆盖范围和mkdirp ,显示语句、分支、函数和行。

关于node.js - 如何计算NodeJS项目中npm依赖使用的百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53520267/

相关文章:

node.js - npm - 如何在 npm 中设置 max-old-space-size

node.js - 为 Node.js 客户端应用程序保留 Firebase 用户

node.js - nuxt generate 不生成index.html

json - 如何将我通过 npm 安装的所有依赖项保存到我的 package.json 文件中?

maven-2 - 如何阻止Maven 2.x尝试为每个版本的依赖项检索不存在的pom.xml文件?

git - 使用外部依赖项在 Git 中切换分支

javascript - 从 Node 中的其他文件调用类实例的函数

node.js - npm - 无法找到我刚刚通过 package.json 安装的本地 grunt 或 karma

node.js - npm install 中的 --save 和 --save-dev 有什么区别?

Grails 安装插件 rest-client-builder 1.0.2 时出错,模块描述符错误