在终端中使用NPM运行脚本来实现彩色日志记录

8

我希望使用NPM作为构建系统来设置一个专门的项目(不使用Gulp或Grunt),所以我有点新手,但到目前为止,它运行得相当顺利,除了这个小问题。我的package.json中的scripts部分看起来像这样:

"scripts": {
        "clean:task": "rimraf dist/*",
        "clean:notify": "notify --t 'Cleaning done.' --m 'dist/ has been cleaned successfully.",
        "clean": "npm run clean:task -s && npm run clean:notify -s",

        "serve": "browser-sync start --p 'xxx.dev/app' --host 'xxx.dev' --port '3000' --open 'external' --f 'app'",

        "styles:task": "node-sass --output-style nested -o app/assets/css app/assets/css",
        "styles:notify": "notify --t 'Styles compilation' --m 'Styles have been compiled successfully'",
        "styles:build": "npm run styles:task && npm run autoprefixer",

        "imagemin": "imagemin app/assets/img dist/img -p",

        "scripts:lint": "jshint --reporter=node_modules/jshint-stylish app/assets/js/scripts.js"
  }

我有通知来宣布任务成功,但我希望在终端中直接显示一些漂亮的彩色消息。我知道可以通过Gulp进行彩色日志记录来实现,但我找不到任何具有CLI的NPM包能够做到这一点。有什么想法吗?这是否可能?
谢谢你的帮助。

1个回答

12

package.json中定义的单个脚本可以按照一种语法输出带有颜色的信息到Mac的终端,这种语法可以简化为echo + ANSI颜色参考 + 一些文本,但你也可以更加复杂。

步骤1:定义你的脚本

"scripts": {
    "greeting": "echo \"\\033[32mHello World\"",
    "notification": "echo \"\\033[33mThe Server Has Started\"",
    "timestamp": "echo \"\\033[31m--------\";date \"+%H:%M:%S\n--------\n\" && echo \"\\033[00m\""
{

步骤2:运行你的脚本

npm run greeting

enter image description here

npm run notification

enter image description here

npm run timestamp

enter image description here

注意事项

转义是其中不可或缺的一部分。StackOverflow上James Lim的评论提到了使用-e,这似乎确保了echo遵守转义斜杠。我发现在直接在终端中运行命令时这是必要的,但在作为npm run <script>的一部分运行时则不必要。

设置颜色的ANSI码由八个字符组成,始终以反斜线开头,如:\033[32m。另外,请注意我在上面的脚本中输出的文本紧跟着ANSI码的最后一个字符——这样消息会在终端上左对齐。

在上面的timestamp脚本中,分号分隔了echodate命令,但保持了我们在开始时设置的相同颜色。实际上,这种颜色将影响此脚本中定义的所有内容,而且在我的情况下,甚至改变了紧随其后的另一个脚本输出的信息的颜色。因此,我包含了另一个echo来简单地将颜色重置为终端的默认颜色(在本例中为黑色)。

供参考,我本可以使用&&代替分号并获得相同的结果。如果您还不知道这两个运算符之间的区别,请参阅这篇post


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接