Как рассчитать процент использования зависимости npm в проекте NodeJS? - PullRequest
0 голосов
/ 28 ноября 2018

Есть ли способ подсчитать, сколько строк кода было фактически запущено и использовано из зависимости npm, определенной в моем проекте (package.json), независимо от того, как зависимость импортируется позже в проекте (всей библиотеке или просточасть этого)?

Чего я хотел бы добиться, так это увидеть, стоит ли устанавливать зависимость в каком-то довольно большом проекте, который у меня есть, например, если используется только 1% используемой библиотеки, тогдавозможно, лучше самому написать эти несколько строк кода, чем полагаться на всю библиотеку и ее зависимости.

1 Ответ

0 голосов
/ 29 ноября 2018

Я нашел решение, которое включает в себя несколько мелких взломов, но работает довольно хорошо.

Идея состоит в том, чтобы использовать инструмент покрытия кода и использовать его для проверки 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: Включить определенные модули узлов # 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, показывая операторы, ветви, функции и строки.

...