Измерение производительности компиляции Babel (для файла или модуля) - PullRequest
5 голосов
/ 05 апреля 2019

Я пытаюсь выяснить, как извлечь некоторую информацию из babel процесса компиляции .

Более конкретно, когда я запускаю babel (Неважно, если вы используете babel-loader Webpack, трансформаторы тестовых фреймворков , CLI Бабеля и т. д.), мне нужно извлечь некоторые информация для каждого скомпилированного файла .Например:

  • путь к файлу
  • время, необходимое для компиляции
  • любых других метаданных?

Что я пробовал до сих пор

Плагин измерения скорости для Webpack ( link )

Работает нормально, но обеспечивает только время работы загрузчиков Webpack.Нет информации об отдельных скомпилированных файлах.

Подключитесь к экземпляру компилятора / компиляции Webpack

Я подумал написать плагин Webpack для подключения к процессу компиляции, как описано здесь , но я не смог найти подходящих хуков для распознавания файла, обрабатываемого babel.

Обновления

Я думаю, @kidroca указал верное направление.Более конкретно, я понимаю, что опция 1052 * Babel является ключом для подключения к процессу компиляции Babel.

См. babel-minify плагин синхронизации .

Связанные темы:

Обновления 28/04/18

Iв конечном итоге попытался обернуть решение в инструмент, который я назвал babel-сроки .

1 Ответ

4 голосов
/ 14 апреля 2019

Вы можете использовать @babel/core и babel.transformSync(code), которые вернутся Абстрактное синтаксическое дерево (AST) информация наряду с некоторыми другими данными. И вы также можете добавить некоторую логику для измерения производительности этого метода

Я установил минимальный репо и сам немного поиграл с ним: https://github.com/kidroca/babel-meta

Обычно вы можете запустить npm run analyze-file ./es6-src/es6-module.js или npm run analyze-dir ./es6-src/es6-module.js и проверить результаты

Это вернет:

{
  "filename": "/full/path/to/src/file.js",
  "cwd": "current/dir",
  "ast": "ast information json - lines, comments, and other info",
  "executionTime": "execution time in ms",
  /* a lot of other info */
}

Вы можете изменить файл analyze.js, чтобы отфильтровать необходимую информацию
Вы можете изменить файл .babelrc для управления преобразованием и добавления / удаления плагинов

...