使用NPM运行脚本在终端中进行彩色记录

时间:2016-05-17 07:32:30

标签: node.js colors terminal npm run-script

我正在尝试使用NPM专门设置一个项目作为构建系统(没有Gulp或Grunt),所以我有点像初学者,但到目前为止它的工作非常好,除了这个小路障。 我的package.json的脚本部分看起来像这样:

"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 个答案:

答案 0 :(得分:2)

package.json 中定义的各个脚本可以通过遵循归结为echo + ANSI颜色参考的语法,以彩色方式向Mac终端输出消息 + 一些文字虽然你也可以比这更复杂。

第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

有些注意事项

逃避本身就是其中的一部分。 James Lim对StackOverflow的评论提到-e的使用,显然确保echo荣誉逃脱斜线。我发现在直接在终端中运行命令时这是必要的,但在将其作为npm run <script>的一部分触发时是不必要的。

设置颜色的ANSI代码由八个始终以反斜杠开头的字符组成,如\033[32m。另外,请注意我在上面的脚本中输出的文本是在ANSI代码中的最后一个字符之后立即开始的 - 这样消息将在终端中向左刷新。

在上面的 timestamp 脚本中,分号分隔echodate命令,但保持我们在开头设置的颜色相同。实际上,这种颜色会影响此脚本中定义的所有内容,在我的情况下,甚至会更改由紧随此脚本的单独脚本输出的消息的颜色。出于这个原因,我添加了另一个echo,它只是将颜色重置为终端的默认颜色(在这种情况下为黑色)。

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