npm スクリプトで '--trace-deprecation' などのノードパラメータを渡す方法

npm スクリプトで '--trace-deprecation' などのノードパラメータを渡す方法

私自身、この問題に対する良い解決策を見つけられないのは少し恥ずかしいですが、残念です。

npm を使用すると、通常、ツールチェーンで定期的に実行するタスクを保存するためのセグメントpackage.jsonを含むファイルが作成されます。例:scripts

"scripts": {
    "build": "webpack --env production",
    "start": "webpack-dev-server"
}

ここで、ツールチェーンの一部 (この例では webpack) が更新され、突然次のようなメッセージが表示されることがあります。

(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

かなり面倒な行ではありませんか? これを避けたい理由は山ほどあります。順不同で挙げます。

  • 特に非推奨は、色分けされたメッセージの海の中の1本の無色の線であり、簡単に見逃されてしまう。
  • プロジェクトを構築する必要があるまた廃止に気付いた後
  • スクリプトでは、必要なビルドツールの名前を使用するだけですが、ここでは完全な相対パスを指定する必要があります。
  • 必要なパラメータを CLI にコピーする必要がありますpackage.json(たとえば、異なる環境で異なるプラグインがアクティブになる場合 - これは一般的な使用例ではなく、プログラマーがすでに廃止を処理するアイデアを持っていたとしても簡単に見落とされてしまいます)
    • 追加されたため、.jsスクリプト本体全体をコピーすることもできません
  • 純粋な怠惰

それで...

  • の部分--trace-deprecationでアクティブにする方法はありますか?scriptspackage.json
  • そうでない場合、代替のビルドスクリプトソースを使用する方法はありますか?ナンバー?

... ノード呼び出しを別のバッチ ファイルに配置することもできますが、すべてのビルド スクリプトを 1 か所で管理する方がはるかに望ましいと思います。

想定される使用例:

このオプションは、ローカルでビルドする場合、およびおそらく選択した CI ブランチでは常にオンにしておきたいので、完全なトレースをログに出力し、ステップを不安定としてマークできます。専用の npm スクリプト「build:trace」などを用意するのが簡単な解決策のようです。もしそれはできる。

答え1

はい、多くのノード CLI フラグを環境変数として渡し、scriptsコマンド内にインライン化することができます。例:

"build": "NODE_OPTIONS='--trace-deprecation' webpack",

サポートされているフラグに関するドキュメントについては、以下を参照してください。https://nodejs.org/api/cli.html#node_options オプション

また、このように環境変数を先頭に追加するだけではWindowsでは機能しません。フィールドにクロスプラットフォームの環境変数が必要な場合scripts、私が知っている最善の解決策は次のとおりです。クロス環境

関連情報