给 npm script 传递参数和添加注释

本小节会介绍 3 个知识点:给 npm script 传递参数以减少重复的 npm script;增加注释提高 npm script 脚本的可读性;控制运行时日志输出能让你专注在重要信息上。

给 npm script 传递参数

eslint 内置了代码风格自动修复模式,只需给它传入 --fix 参数即可,在 scripts 中声明检查代码命令的同时你可能也需要声明修复代码的命令,面对这种需求,大多数同学可能会忍不住复制粘贴,如下:

diff --git a/package.json b/package.json
index c32da1c..b6fb03e 100644
--- a/package.json
+++ b/package.json
@@ -5,6 +5,7 @@"lint:js": "eslint *.js",
+    "lint:js:fix": "eslint *.js --fix",

在 lint:js 命令比较短的时候复制粘贴的方法简单粗暴有效,但是当 lint:js 命令变的很长之后,难免后续会有人改了 lint:js 而忘记修改 lint:js:fix别问我为啥,我就是踩着坑过来的),更健壮的做法是,在运行 npm script 时给定额外的参数,代码修改如下:

diff --git a/package.json b/package.json
--- a/package.json
+++ b/package.json
@@ -5,6 +5,7 @@"lint:js": "eslint *.js",
+    "lint:js:fix": "npm run lint:js -- --fix",

要格外注意 --fix 参数前面的 -- 分隔符,意指要给 npm run lint:js 实际指向的命令传递额外的参数。

运行效果如下图:

上图第2个红色框里面是实际执行的命令,可以看到 --fix 参数附加在了后面。

TIP#6:如果你不想单独声明 lint:js:fix 命令,在需要的时候直接运行: npm run lint:js -- --fix 来实现同样的效果。

问题来了,如果我想为 mocha 命令增加 --watch 模式方便在开发时立即看到测试结果,该怎么做呢?相信读到这里你心中已经有了答案。

:stuck_out_tongue:

给 npm script 添加注释

如果 package.json 中的 scripts 越来越多,或者出现复杂的编排命令,你可能需要给它们添加注释以保障代码可读性,但 json 天然是不支持添加注释的,下面是 2 种比较 trick 的方式。

第一种方式是,package.json 中可以增加 // 为键的值,注释就可以写在对应的值里面,npm 会忽略这种键,比如,我们想要给 test 命令添加注释,按如下方式添加:

diff --git a/package.json b/package.json
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
+    "//": "运行所有代码检查和单元测试","test": "npm-run-all --parallel lint:* mocha"

这种方式的明显不足是,npm run 列出来的命令列表不能把注释和实际命令对应上,如果你声明了多个,npm run 只会列出最后那个,如下图:

另外一种方式是直接在 script 声明中做手脚,因为命令的本质是 shell 命令(适用于 linux 平台),我们可以在命令前面加上注释,具体做法如下:

diff --git a/package.json b/package.json
--- a/package.json
+++ b/package.json
@@ -10,8 +10,7 @@
-    "//": "运行所有代码检查和单元测试",
-    "test": "npm-run-all --parallel lint:* mocha"
+    "test": "# 运行所有代码检查和单元测试 \n    npm-run-all --parallel lint:* mocha"

注意注释后面的换行符 \n 和多余的空格,换行符是用于将注释和命令分隔开,这样命令就相当于微型的 shell 脚本,多余的空格是为了控制缩进,也可以用制表符 \t 替代。这种做法能让 npm run 列出来的命令更美观,但是 scripts 声明阅读起来不那么整齐美观。

上面两种方式都有明显的缺陷,个人建议的更优方案还是把复杂的命令剥离到单独的文件中管理,在单独的文件中可以自由给它添加注释,详见后续章节。

调整 npm script 运行时日志输出

在运行 npm script 出现问题时你需要有能力去调试它,某些情况下你需要让 npm script 以静默的方式运行,这类需求可通过控制运行时日志输出级别来实现。

日志级别控制参数有好几个,简单举例如下:

默认日志输出级别

即不加任何日志控制参数得到的输出,可能是你最常用的,能看到执行的命令、命令执行的结果。

显示尽可能少的有用信息

结合其他工具调用 npm script 的时候比较有用,需要使用 --loglevel silent,或者 --silent,或者更简单的 -s 来控制,这个日志级别的输出实例如下(只有命令本身的输出,读起来非常的简洁):

如果执行各种 lint script 的时候启用了 -s 配置,代码都符合规范的话,你不会看到任何输出,这就是没有消息是最好的消息的由来,哈哈!

显示尽可能多的运行时状态

排查脚本问题的时候比较有用,需要使用 --loglevel verbose,或者 --verbose,或者更简单的 -d 来控制,这个日志级别的输出实例如下(详细打印出了每个步骤的参数、返回值,下面的截图只是部分):


本节用到的代码见 GitHub,想边看边动手练习的同学可以拉下来自己改,注意切换到正确的分支 03-arguments-comments-logs

给 npm script 传递参数和添加注释相关推荐

  1. npm run传递参数

    karma.conf.js使用以下设置时,unit test会不停地跑. autoWatch: false, singleRun: true, 想只跑一次,发现命令行参数不起效果. npm run n ...

  2. NPM 命令传递参数

    方法一: 格式 npm run demo -- --port=300 demo替换成自己的命令,注意后面的参数必须是两个-- --key=value 执行 npm run demo -- --port ...

  3. 【Oracle】修改参数的同时添加注释

    当修改参数时添加注释,我们会用到如下语句: alter system set parameter=value comment='description';--修改参数需要有相应权限的用户去执行. 例如 ...

  4. script src 方式传递参数

    传递动态参数 <script src="javascript/Adv_Search.js?t=' + new Date().getTime() + '"></sc ...

  5. 监听文件变化并自动运行 npm script

    监听文件变化并自动运行 npm script 软件工程师做的事情基本都是在实现自动化,比如各种业务系统是为了业务运转的自动化,部署系统是为了运维的自动化,对于开发者本身,自动化也是提升效率的关键环节, ...

  6. vue中Npm run build 根据环境传递参数方法来打包不同域名

    项目开发中,前端在配置后端api域名时很困扰,常常出现: 本地开发环境: api-dev.demo.com 测试环境: api-test.demo.com 线上生产环境: api.demo.com, ...

  7. 稳扎稳打Silverlight(29) - 2.0Tip/Trick之Cookie, 自定义字体, 为程序传递参数, 自定义鼠标右键...

    [索引页] [源码下载] 稳扎稳打Silverlight(29) - 2.0Tip/Trick之Cookie, 自定义字体, 为程序传递参数, 自定义鼠标右键, 程序常用配置参数 作者:webabcd ...

  8. php json注释,【部分解决】Json中添加注释

    [问题] 通过json文件给python脚本传递参数,但是希望每个参数都有对应的注释,以方便使用者知道该参数的确切含义. 问题转化为给json中添加注释. [解决过程] 1.网上找了json的官网JS ...

  9. Jmeter跨线程组传递参数

    jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B和线程组C中被调用的. 但是有时为了方便管理,我们可能是把各个接口单独存放在不同的线程组中.拿t ...

最新文章

  1. Ubuntu 16.04 LTS今日发布
  2. php smtp tls,php – RoundcubePostfix SMTP:SSL例程:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c...
  3. [SQL基础教程]1-4 SQL 表的创建
  4. android 应用退到后台,类似最小化
  5. 191. 位1的个数 golang
  6. Python检查特定值是否包含在列表中
  7. 教你制作U盘,内存卡,硬盘等等等的漂亮背景
  8. 反复出现的PSW木马, 附日志,请高手指点
  9. Spring Boot2.0之性能优化
  10. 是什么 通信中unit_Ubuntu Linux中的特权提升漏洞Dirty Sock分析(含PoC)
  11. mysql可变数据类型_【Python面试】 说说Python可变与不可变数据类型?
  12. CI 图片上传路径问题的解决
  13. android获取当前显示的view,Android中ViewPager获取当前显示的Fragment
  14. 图书管理系统项目总结
  15. 斯坦福大学的 CS231n(全称:面向视觉识别的卷积神经网络)
  16. arcmap新手教程_ArcGIS入门教程(1)——ArcMap应用基础
  17. 怎样快速使用计算机,三分钟教你如何快速熟悉电脑,怎样快速准确的熟悉键盘打字以及快捷键的使用...
  18. 【数据库】理解一对一、一对多、多对多关系
  19. 认知升级是令我们变得优秀的重要基石,没有之一
  20. 目录 如何成为一个合格的段子手

热门文章

  1. Win 7英文系统显示中文乱码的解决
  2. 电子商务网站常用源码介绍
  3. 请谨慎使用sp_executesql
  4. go语言一个包含nil指针的接口不是nil接口的理解
  5. Linux(debian7)操作基础(十四)之文本搜索命令grep使用方法
  6. Leetcode算法题(C语言)16--有效的字母异位词
  7. 【今日CS 视觉论文速览】Wed, 16 Jan 2019
  8. 四窗口卖票 自己的票
  9. java 作业 老师与教员信息 类与对象
  10. 创建一个django的项目 使用自创的虚拟环境