Как передать параметры узла, такие как «--trace-deprecation» в скриптах npm

Как передать параметры узла, такие как «--trace-deprecation» в скриптах npm

Мне немного стыдно, что я сам не могу найти хорошего решения этой проблемы, но увы.

При использовании 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.

Связанный контент