美文网首页让前端飞
package.json 使用指南

package.json 使用指南

作者: 石燕平_Leo | 来源:发表于2019-07-18 13:20 被阅读0次

    1. 概述

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

    package.json 可以手动创建,也可以使用 npm init 去自动生成。

    一个完整的 package.json 一般都包含以下内容

    {
      "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的一些基本信息,主要的功能还是依赖 scriptsdependenciesdevDependencies

    2. scripts

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

    有些命令缩写需要写run修饰符,有些不需要,主要还是看命令的缩写是不是 npm 的关键字。可以在小黑窗(命令行工具)中输入npm查看具体npm的关键字。

    如:

    image

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

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

    2.1 scripts 命令的生命周期

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

    如:

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

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

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

    image

    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. 希望各位关注一下我的公众号吧,新的文章第一时间发到公众号,公众号主要发一些个人随笔、读书笔记、还有一些技术热点和实时热点,并且还有非常吸引人的我个人自费抽奖活动哦~
    image

    相关文章

      网友评论

        本文标题:package.json 使用指南

        本文链接:https://www.haomeiwen.com/subject/dzxllctx.html