13-npm package.json

package.json

npm 5 版本在延续 npm 3 扁平化依赖包安装方式的基础上,新增了一个package-lock.json文件。package-lock.json的主要作用就是锁定依赖项的安装目录和依赖包的版本信息。

当我们执行npm install的时候,node会从package.json文件读取模块名称,从package-lock.json文件中获取版本号。cnpm install不会去pack-lock.json中获取任何信息的,它只会根据各依赖包的配置下载对应版本的包。

package.json 位于模块的目录下,用于定义包的属性,当你的项目需要依赖多个包时,推荐使用 package.json。其优点为:

  • 它以文档的形式规定了项目所依赖的包
  • 可以确定每个包所使用的版本
  • 项目可以重复的构建,在多人协作时更加方便

创建package.json文件

  • 方式一:手动创建,文件中必须包含: name 和 version

  • 方式二:通过 npm init 命令生成遵守规范的 package.json文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $ npm init
    This utility will walk you through creating a package.json file.
    It only covers the most common items, and tries to guess sensible defaults.

    See `npm help json` for definitive documentation on these fields
    and exactly what they do.

    Use `npm install <pkg> --save` afterwards to install a package and
    save it as a dependency in the package.json file.

    Press ^C at any time to quit.
    name: (node_modules) runoob # 模块名
    version: (1.0.0)
    description: Node.js 测试模块(www.runoob.com) # 描述
    entry point: (index.js)
    test command: make test
    git repository: https://github.com/runoob/runoob.git # Github 地址
    keywords:
    author:
    license: (ISC)
    About to write to ……/node_modules/package.json: # 生成地址

    {
    "name": "runoob",
    "version": "1.0.0",
    "description": "Node.js 测试模块(www.runoob.com)",
    ……
    }


    Is this ok? (yes) yes

    以上的信息,你需要根据你自己的情况输入。在最后输入 “yes” 后会生成 package.json 文件。

    该文件就是一个符合 npm 规范的 package.json 文件。这里的 index.js 作为包的接口。

    也可简单的使用 npm init -y。其中-y(代表yes)

Package.json 属性说明

  • name - 包名。全部小写,没有空格,可以使用下划线或者横线
  • version - 包的版本号。x.x.x的格式,符合语义化规则
  • description - 包的描述,有助于搜索。
  • homepage - 包的官网 url 。
  • author - 包的作者姓名。
  • license:默认是MIT
  • contributors - 包的其他贡献者姓名。
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
  • devDependencies,在开发、测试环境中用到的依赖
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
  • main - main 字段指定了程序的主入口文件,require(‘moduleName’) 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
  • keywords - 关键字,有助于人们使用npm search搜索时候发现你的项目
  • scripts:支持的脚本,默认是一个空的test

指定依赖包

两种依赖包:

  • dependencies: 在生产环境中需要依赖的包。通过npm install <packge> --save命令自动添加依赖到文件(或者使用简写的参数 -S)。
  • devDependencies:仅在开发和测试环节中需要依赖的包。通过npm install <packge> --save-dev命令自动添加依赖到文件(或者使用简写的参数 -D)。

当然你也可以在文件中手动添加依赖

如果其他人也需要这个项目,只需要把这个 package.json 文件给他,然后进行简单的 npm install 即可。

语义化版本规则

我们经常看到设置有依赖dependencies的内容,例如 “vue”: “^2.5.22”,key是依赖包的名称,value是这个依赖包的版本,那么版本签名的^是什么意思呢,或者版本前面直接是一个*是什么意思,这就是npm的语义化版本规则。

npm包提供者需要了解npm规则,应该注意版本规范,如果打算与别人分享,应该从1.0.0版本开始,遵循如下标准

  • 补丁版本,解决了bug或者一些较小的更改,增加最后一位数字,如:1.0.1
  • 小版本,增加了新特性,同时不会影响之前的版本,增加中间一位数据,如:1.1.0
  • 大版本,大改版,无法兼容之前的版本,增加第一位数字,如:2.0.0

使用者,可以在package.json文件中写明可以接受的更新程度,

  • 接受补丁版本的更新,1.0 1.0.x -1.0.4
  • 接受小版本的更新,1 1.x ^1.0.4
  • 接受大版本的更新 * x

13-npm package.json
https://flepeng.github.io/021-frontend-nodejs-13-包管理-01-nodejs-npm-13-npm-package-json/
作者
Lepeng
发布于
2021年8月4日
许可协议