我正在尝试使用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软件包能够做到这一点。 有任何想法吗 ?它甚至可能吗?
感谢您的帮助。
答案 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
npm run notification
npm run timestamp
有些注意事项
逃避本身就是其中的一部分。 James Lim对StackOverflow的评论提到-e
的使用,显然确保echo
荣誉逃脱斜线。我发现在直接在终端中运行命令时这是必要的,但在将其作为npm run <script>
的一部分触发时是不必要的。
设置颜色的ANSI代码由八个始终以反斜杠开头的字符组成,如\033[32m
。另外,请注意我在上面的脚本中输出的文本是在ANSI代码中的最后一个字符之后立即开始的 - 这样消息将在终端中向左刷新。
在上面的 timestamp 脚本中,分号分隔echo
和date
命令,但保持我们在开头设置的颜色相同。实际上,这种颜色会影响此脚本中定义的所有内容,在我的情况下,甚至会更改由紧随此脚本的单独脚本输出的消息的颜色。出于这个原因,我添加了另一个echo
,它只是将颜色重置为终端的默认颜色(在这种情况下为黑色)。
作为参考,我可以使用&&
代替分号并获得相同的结果。如果您还不知道这两个运算符之间的区别,请参阅此post。