Мне немного стыдно, что я сам не могу найти хорошего решения этой проблемы, но увы.
При использовании npm у нас обычно есть package.json
файл с scripts
сегментом для хранения задач, которые мы хотим, чтобы наша цепочка инструментов выполняла регулярно, например:
"scripts": {
"build": "webpack --env production",
"start": "webpack-dev-server"
}
Теперь мы можем обновить части нашей цепочки инструментов — в этом примере веб-пакета — и внезапно получаем такое сообщение:
(node:10868) [DEP_WEBPACK_DEPRECATION_ARRAY_TO_SET] DeprecationWarning: Compilation.modules was changed from Array to Set (using Array method 'reduce' is deprecated)
(Use `node --trace-deprecation ...` to show where the warning was created)
Как есть, он совершенно бесполезен для диагностики и решения проблемы. Что-то где-то в каком-то скрипте сборки не так. ... Ура!
По крайней мере, в случае Webpack и его плагинов мы можем получить довольно полезный вывод трассировки, вызвав его через CLI:
node --trace-deprecation node_modules/webpack/bin/webpack.js --env production
Довольно громоздкая строка, не правда ли? Есть целый ряд причин, по которым мы действительно хотим этого избежать. В произвольном порядке:
- В частности, устаревание представляет собой одну неокрашенную строку в море цветных сообщений — их легко пропустить.
- мы должны построить проектсновапосле того, как заметили устаревание
- В скрипте мы просто используем имя нужного нам инструмента сборки, здесь же мы должны указать полный относительный путь
- нам нужно скопировать нужные параметры из нашего
package.json
в CLI (например, если разные среды активируют разные плагины — не самый распространенный вариант использования, и поэтому его легко упустить из виду, даже если программист уже придумал, как обрабатывать отклонения)- из-за добавленного
.js
мы не можем просто скопировать все тело скрипта
- из-за добавленного
- чистая, неподдельная лень
Так...
- Есть ли способ активировать
--trace-deprecation
частьscripts
?package.json
- Если нет, есть ли способ использовать альтернативные источники скриптов сборки, например черезнпс?
... Полагаю, я всегда мог бы поместить вызов узла в отдельный пакетный файл, но я бы предпочел использовать единое место для управления всеми скриптами сборки.
Предполагаемый вариант использования:
Я бы хотел, чтобы эта опция всегда была включена при локальной сборке и, возможно, на некоторых ветках CI, чтобы я мог вывести полную трассировку прямо в журнал и отметить шаг как нестабильный. Наличие специального скрипта npm "build:trace" или подобного, похоже, было бы простым решением -еслиЭто может быть сделано.
решение1
Да, действительно — вы можете передавать множество флагов CLI узла как переменные среды, которые можно встроить в scripts
команду. Например:
"build": "NODE_OPTIONS='--trace-deprecation' webpack",
Документацию о поддерживаемых флагах см. здесь:https://nodejs.org/api/cli.html#node_optionsопции
Кроме того, простое добавление переменной окружения не будет работать в Windows. Если вы хотите кроссплатформенные переменные окружения в ваших scripts
полях, лучшее решение, которое я знаю, этокросс-env.