如何在 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

这条线很麻烦,不是吗?我们确实想避免这种情况的原因有很多。无特定顺序:

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

所以...

  • 有没有办法--trace-deprecationscripts部分中激活package.json
  • 如果没有,是否有办法使用替代的构建脚本源,例如通过核动力源

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

预期用例:

我希望此选项在本地构建时始终处于启用状态,并且可能在选定的 CI 分支上也处于启用状态,这样我就可以将完整的跟踪直接输出到日志中并将该步骤标记为不稳定。使用专用的 npm 脚本“build:trace”或类似脚本似乎是最直接的解决方案 -如果可以办到。

答案1

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

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

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

此外,在 Windows 上,仅像这样添加环境变量是行不通的。如果你想在字段中使用跨平台环境变量scripts,我知道的最佳解决方案是跨环境

相关内容