package.json 使用指南

1. 概述

通常的 node 项目,或者依据 node 搭建的项目,项目的根目录下都会有一个 package.json 文件,package.json 中定义了项目所须要的各类模块和项目的配置信息。javascript

package.json 能够手动建立,也可使用 npm init 去自动生成。html

一个完整的 package.json 通常都包含如下内容java

{
  "name": "hello world",
  "version": "1.0.0",
  "author": "小石",
  "description": "一个node程序",
  "keywords": ["node.js", "js"],
  "scripts": {
    "start": "gulp",
    "build:js": "gulp uglify-js"
  },
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.1.2",
    "@babel/preset-env": "^7.1.0"
  },
  "dependencies": {
    "browser-sync": "^2.23.6"
  }
}
复制代码

其中nameversion(遵循大版本,次要版本,小版本),descriptionauthorkeywords,都属于 package.json的一些基本信息,主要的功能仍是依赖 scriptsdependenciesdevDependenciesnode

2. scripts

scripts 主要指定了一些脚本命令的缩写,好比上面的例子中,使用 npm start 就能够运行 gulp 的脚本命令;使用 npm run build:js 就能够运行 gulp uglify-js 的脚本命令。shell

有些命令缩写须要写run修饰符,有些不须要,主要仍是看命令的缩写是否是 npm 的关键字。能够在小黑窗(命令行工具)中输入npm查看具体npm的关键字。express

如:npm

蓝框框起来的命令,在使用的时候都不须要写 run,直接输入 npm XX 便可运行指定的命令。json

在使用 scripts 指定脚本缩写的时候还有一些小技巧。gulp

2.1 scripts 命令的生命周期

在编写运行脚本命令缩写时,有生命周期的说话,在某个脚本缩写以前使用 pre ,当运行指定的脚本命令以前,会先将对应添加了 pre 的命令进行运行。babel

如:

"scripts": {
    "pree2e": "karma start",
    "e2e": "node ./e2e/*.spec.js"
},
复制代码

e2e 命令以前添加了一条 pree2e 的命令,在执行 npm run e2e 的时候,就会先执行 pree2e 对应的命令,而后执行 e2e 对应的命令。

小黑窗中执行的命令就以下图所示:

2.2 && 和 & 的使用

在编写 scripts 命令时,若是多条命令想写到一个缩写中,可使用 &&& 符号。

使用 && 链接的命令属于串行执行,先执行 && 以前的命令,再执行&&以后的。

使用 & 链接的命令属于并行执行,互不干扰,命令同时进行。

如:

"scripts": {
    "e2e": "karma start && node ./e2e/*.spec.js",
    "unit": "karma start & node ./e2e/*.spec.js"
},
复制代码

2.3 多条命令一块儿运行

很大的项目中有的时候会有不少条 scripts 命令的缩写,有的时候须要将多条命令同时执行,可使用上面说的 &&& 符号链接,可是当不少条命令一块儿执行时,使用 &&& 链接,看起来就会很冗余。

这个时候就要用到 npm-run-all 命令了。

如:

"scripts": {
    "test": "npm-run-all unit  e2e  ui  service",
    "unit": "karma start",
    "pree2e": "karma start",
    "e2e": "node ./e2e/*.spec.js",
    "ui": "backstop test",
    "service": "node ./mochaRunner"
}
复制代码

npm-run-all 命令能够规定有些命令能够一块儿执行,可是这个是串行的执行,有一个命令挂了就会致使命令中止。

这个时候还能够添加一个关键字 --parallel ,表示后面的命令同时执行。

如:

"test": "npm-run-all --parallel unit  e2e  ui  service"
复制代码

2.4 命令的退出

在写脚本命令的时候可使用 exit() 退出,exit(0) 表示正常退出,exit(1) 表示非正常退出,其实这些都是 node 中的命令,在 node 中使用更多一些。

"test": "npm-run-all --parallel unit  e2e  ui  service exit()"
复制代码

在 node 中 process.exit(0) 表示正常退出,process.exit(1) 表示非正常退出,非正常退出能够再处理异常的时候使用。

3. dependencies 和 devDependencies

3.1 简介

dependenciesdevDependencies 中其实都是添加一些项目中须要引用的依赖包。可是二者是有区别的,dependencies 中依赖包主要是项目运行时所须要的,在打包的时候会将依赖包打到项目中。devDependencies 主要是项目开发时所须要的依赖模块,这个主要是开发的时候用,打包的时候不会打到项目中。

dependenciesdevDependencies 下的依赖都有版本号。在对应的版本号上能够添加各类限定,主要有一下几种:

  • 指定版本:好比 1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
  • 波浪号(tilde)+指定版本:好比~1.2.2,表示安装 1.2.x 的最新版本(不低于 1.2.2),可是不安装 1.3.x,也就是说安装时不改变大版本号和次要版本号。
  • 插入号(caret)+指定版本:好比 ˆ1.2.2,表示安装 1.x.x 的最新版本(不低于 1.2.2),可是不安装 2.x.x,也就是说安装时不改变大版本号。须要注意的是,若是大版本号为 0,则插入号的行为与波浪号相同,这是由于此时处于开发阶段,即便是次要版本号变更,也可能带来程序的不兼容。
  • latest:安装最新版本。

3.2 安装

在安装某一个模块时,会根据使用的命令不一样,指定依赖包运行的环境。

如:

npm install express --save
npm install express --save-dev
复制代码

使用 --save 会默认将依赖包安装到 dependencies 下,使用--save-dev会将依赖包安装到 devDependencies 下。

4. bin

bin 项用来指定各个内部命令对应的可执行文件的位置。

如:

"bin": {
  "someTool": "./bin/someTool.js"
}
复制代码

有了上面的 bin 以后,咱们写 scripts 命令时,就能够进行缩写了。

如:

scripts: {
  start: './node_modules/someTool/someTool.js build';
}

// 简写为
scripts: {
  start: 'someTool build';
}
复制代码

5. 其余

其余的命令还有不少,上面的主要是经常使用的,还想详细了解的,能够参考JavaScript 标准参考教程

其实 package.json 只是一个配置的 json 文件,懂一些基础的就能够了,能使用最重要,开发中最重要的仍是项目主体的开发,好多脚手架其实已经帮咱们把这些都弄好了,咱们要能看懂。

阅读完后两部曲

  1. 喜欢的小伙伴点个赞吧,感受对身边人有帮助的,麻烦动动手指,分享一下。很是感谢各位花时间阅读完,同时很感谢各位的点赞和分享。
  2. 但愿各位关注一下个人公众号吧,新的文章第一时间发到公众号,公众号主要发一些我的随笔、读书笔记、还有一些技术热点和实时热点,而且还有很是吸引人的我我的自费抽奖活动哦~

相关文章
相关标签/搜索