Самый простой способ обнаружить deprecated API - запустить приложение с флагом:
node --throw-deprecation app.js
Что это дает:
Для более детальной информации:
node --trace-deprecation --no-deprecation app.js
Преимущества:
--trace-deprecation
показывает полный стек вызовов--no-deprecation
отключает стандартные предупреждения (чтобы сосредоточиться на trace)Настройка ESLint для поиска deprecated API:
npm install eslint-plugin-node --save-dev
.eslintrc.js
:module.exports = {
plugins: ['node'],
rules: {
'node/no-deprecated-api': 'error'
}
};
Программный способ через process
:
process.on('warning', (warning) => {
if (warning.name === 'DeprecationWarning') {
console.error('Deprecated API used:');
console.error(warning.message);
console.error(warning.stack);
}
});
Для просмотра всех доступных флагов, включая deprecation-related:
node --v8-options | grep -i deprec
Специализированный инструмент для поиска deprecated зависимостей:
npm install -g depcheck
depcheck
Пример для GitHub Actions:
name: Check Deprecations
on: [push]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: node --throw-deprecation app.js
Проверка устаревших пакетов:
npm outdated
Для глубокого анализа:
npm audit
Для обнаружения API, которые скоро станут deprecated:
node --pending-deprecation app.js
Для продвинутого мониторинга:
const async_hooks = require('node:async_hooks');
const fs = require('node:fs');
async_hooks.createHook({
init(asyncId, type) {
if (type.includes('Deprecation')) {
fs.writeSync(1, `Deprecation detected: ${type}\n`);
}
}
}).enable();
Для обнаружения deprecated API в Node.js приложениях существует множество методов - от простых флагов запуска до сложных инструментов статического анализа. Оптимальный подход - комбинация нескольких способов: использование флагов Node.js при разработке, интеграция проверок в CI/CD и регулярный аудит зависимостей. Это поможет поддерживать код современным и избежать проблем при обновлении Node.js.