输出到 npm 脚本中的命令行?

Output to command line within npm scripts?

我的 package.json 中有一个脚本,代码如下:

 "scripts": {
    "build": "postcss tailwind/tailwind.css -o css/cenic.tailwind.css",
    "watch": "postcss tailwind/tailwind.css -o css/cenic.tailwind.css --watch"
  },

它工作正常 - 但我如何让它输出文本到命令行,比如

script ran at {{ date(now) }}

换句话说,我想在脚本有 运行 时看到通知。

跨平台(Windows/Linux/macOS...)

您可以执行以下操作以在脚本开始其任务时记录 date/time:

"build": "node -e \"console.log('script started at: %s', Date())\" && postcss tailwind/tailwind.css -o css/cenic.tailwind.css"

解释:

  1. &&运算符左边的部分是;

    node -e \"console.log('script started at: %s', Date())\"
    
    • 利用 nodejs 命令行选项 -e 评估内联 JavaScript.
    • 内联脚本利用 JavaScript 的 console.log(...)Date().
  2. && 运算符右侧的命令是您想要 运行 的任何命令,在您的场景中是 postcss 命令.

变化:

  • 要为日志着色,您可以添加一些 ANSI/VT100 Control sequences。例如:

    "build": "node -e \"console.log('%sscript started at: %s%s', '\x1b[42;30m', Date(), '\x1b[0m' )\" && postcss tailwind/tailwind.css -o css/cenic.tailwind.css"
    
  • 要记录 npm 脚本完成而不是启动的时间,您可以切换命令的顺序。例如:

    "build": "postcss tailwind/tailwind.css -o css/cenic.tailwind.css && node -e \"console.log('script completed at: %s', Date())\""
    

仅限 Nix 平台(Linux/MacOS...)

如果您只想要 运行 在 *nix 平台上的解决方案,那么您可以改为执行以下操作:

"build": "echo \"script started at: $(date)\" && postcss tailwind/tailwind.css -o css/cenic.tailwind.css"

解释:

  1. && 运算符左侧的部分为:

    echo \"script started at: $(date)\"
    
    • 利用 shell echo 命令将消息打印到命令行。
    • Command substitution, i.e. the $(...) part, is utilized to obtain the output from the shells date命令。
  2. && 运算符右侧的命令是您想要 运行 的任何命令,在您的场景中是 postcss 命令.

如果您想将视觉样式应用到 echo 命令,请参考我的回答