Skip to content

Latest commit

 

History

History
112 lines (71 loc) · 3.84 KB

README.md

File metadata and controls

112 lines (71 loc) · 3.84 KB

开始之前

开始之前,希望你已经阅读了阮一峰老师的npm scripts 使用指南,了解了关于 npm scripts 的基本知识。

本项目专注于实战和一些细节。

了解package.json

在一个新建的目录中,我们运行npm init并点击若干次回车键之后就生成了一个默认的最简单的 npm包,官方叫做 package 或者 module。

所谓 npm包 就是一个package.json文件和若干代码来组成。

package.json给 npm 提供了这个包的基本信息,比如namedescription,author,version,license等。

此外还提供了告知 npm 如何处理这个包的信息,比如main定义了整个包的入口文件,scripts则更加重要,定义了可以让 npm 来运行的操作。

scripts是什么?

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
},

这段代码的意思是,当在命令行中运行

npm run test

的时候,就几乎等同于运行

echo \"Error: no test specified\" && exit 1

这些定义在package.json里面的脚本,就称为 npm 脚本。它有很多好处:

  • 项目的相关脚本,可以集中在一个地方。
  • 不同项目的脚本命令,只要功能相同,就可以有同样的对外接口。特别是一些标准操作,比如npm test就被很多自动测试软件调用。
  • 可以利用 npm 提供的信息和辅助功能。
  • 可以调用任意的 npm 包,比起 gulp 或 grunt 等任务构建工具能够使用更多的包,效率也更高。

npm 脚本会使用当前系统的 shell 来运行,在 linux、OS X 中,就是 Bash。

小试牛刀

试着运行一下npm run test,会发现命令行给出了错误:

> [email protected] test /Users/yuguo/Sites/npm-scripts-tutorial/1.intro
> echo "Error: no test specified" && exit 1

Error: no test specified

npm ERR! Darwin 16.3.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "test"
npm ERR! node v7.0.0
npm ERR! npm  v3.10.8
npm ERR! code ELIFECYCLE
npm ERR! [email protected] test: `echo "Error: no test specified" && exit 1`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] test script 'echo "Error: no test specified" && exit 1'.

第1行给出了运行这句命令的包名称、脚本命令、和路径。

第2行给出了脚本的内容。

第4行打印出了echo打印的内容。

第6行后面的所有内容都是报错相关信息,因为我们用了 exit 1来结尾,所以 npm 认为我们的脚本没有运行成功。

与此同时,应该能够在当前目录看到生成了一个 npm-debug.log 文件,记录了错误的log文件,每次运行npm run都会清除旧的 npm-debug.log文件,如果有新的错误产生,会重新生成。

什么是 exit status 1

exit 命令会终结一段 Bash 脚本(就像C语言里面一样),并且可选返回一个数字,来告诉调用它的父程序自己的运行状况。

运行成功的命令会返回 0,不成功的命令会返回一个非0的数字,叫做exit status。

所以,npm 默认生成的这段测试脚本就是警告未配置测试代码,然后exit 1了。

试着把test脚本改成如下再试试?

"scripts": {
  "test": "echo \"Pass the test!\" && exit 0"
},

现在系统显示如下:


> [email protected] test /Users/yuguo/Sites/npm-scripts-tutorial/1.intro
> echo "Pass the test!" && exit 0

Pass the test!

简写

npm 提供了一些简写方式,比如npm testnpm startnpm stop等。

npm test就是npm run test的简写。

简写有两个好处

  1. 常用命令,输入更方便
  2. 一致的标准接口,让 npm 可以更加方便地开始和停止一个项目,或者测试一个项目。一些持续集成工具,比如Travis,就使用了这个特征,它会调用默认脚本npm test来进行测试