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

4mi*_*ori 5 command-line-interface npm package.json

我的 package.json 中有一个带有以下代码的脚本:

 "scripts": {
    "build": "postcss tailwind/tailwind.css -o css/cenic.tailwind.css",
    "watch": "postcss tailwind/tailwind.css -o css/cenic.tailwind.css --watch"
  },
Run Code Online (Sandbox Code Playgroud)

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

script ran at {{ date(now) }}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*obC 8

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

您可以执行以下操作来记录脚本开始其任务时的日期/时间:

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

解释:

  1. &&运算符左侧读取的部分;

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

变化:

  • 要为日志着色,您可以添加一些ANSI/VT100 控制序列。例如:

    "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"
    
    Run Code Online (Sandbox Code Playgroud)
  • 要记录 npm 脚本何时完成而不是启动,您可以切换命令的顺序。例如:

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

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

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

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

解释:

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

    echo \"script started at: $(date)\"
    
    Run Code Online (Sandbox Code Playgroud)
    • 使用 shellsecho命令将消息打印到命令行。
    • 命令替换,即$(...)部件,用于从 shellsdate命令获取输出。
  2. &&运算符右侧的命令是您要运行的任何命令,在您的场景中它是postcss命令。

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