如何在 npm 脚本中传递节点参数,例如“--trace-deprecation”

Zsa*_*sar 5 script node.js npm

我有点羞愧,我自己找不到一个好的解决方案,但可惜。

使用 npm,我们通常有一个带有段package.json的文件scripts,用于存储我们希望工具链定期执行的任务,例如:

"scripts": {
    "build": "webpack --env production",
    "start": "webpack-dev-server"
}
Run Code Online (Sandbox Code Playgroud)

现在我们可能已经更新了工具链的一部分 - 在这个示例中是 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)
Run Code Online (Sandbox Code Playgroud)

按原样,它对于诊断和解决问题完全没有用。某些构建脚本中的某些地方是错误的。... 耶!

至少在 webpack 及其插件的情况下,我们可以获得在 CLI 上调用的非常有用的跟踪输出:

node --trace-deprecation node_modules/webpack/bin/webpack.js --env production
Run Code Online (Sandbox Code Playgroud)

相当麻烦的一行,不是吗?我们确实想避免这种情况的原因有很多。排名不分先后:

  • 特别是弃用是彩色编码消息海洋中的一条无色线 - 很容易被错过
  • 在注意到弃用后,我们必须再次构建该项目
  • 在脚本中,我们只需使用所需构建工具的名称,这里我们必须提供完整的相对路径
  • 我们必须将所需的参数从package.jsonCLI 复制到(例如,不同的环境激活不同的插件 - 这不是一般用例,因此很容易被忽视,即使程序员已经有了处理弃用的想法)
    • 由于添加了内容,.js我们也不能复制整个脚本主体
  • 纯粹的、纯粹的懒惰

所以...

  • 有没有办法激活--trace-deprecationscripts部分package.json
  • 如果没有,有没有办法使用替代构建脚本源,例如通过nps

...我想,我总是可以将节点调用放入单独的批处理文件中,但我更愿意使用一个位置来管理所有构建脚本。

预期用例:

我希望在本地构建时以及可能在选定的 CI 分支上始终启用此选项,以便我可以将完整跟踪直接输出到日志中并将该步骤标记为不稳定。拥有一个专用的 npm 脚本“build:trace”或类似的脚本似乎是一个简单的解决方案 -如果可以的话。

Mik*_*ing 0

是的,确实\xe2\x80\x94,您可以将许多节点 CLI 标志作为环境变量传递,这些变量可以内联在命令中scripts。例如:

\n
"build": "NODE_OPTIONS=\'--trace-deprecation\' webpack",\n
Run Code Online (Sandbox Code Playgroud)\n

有关支持标志的文档,请参阅:https ://nodejs.org/api/cli.html#node_optionsoptions

\n

另外,仅仅在 Windows 上添加环境变量是行不通的。如果您希望在您的领域中使用跨平台环境变量scripts,我所知道的最佳解决方案是cross-env

\n