有没有办法计算我的项目 (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/