package.json文件详解

概述

每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

package.json文件就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。比如name就是项目名称,version是版本(遵守“大版本.次要版本.小版本”的格式)。

创建

1.手动输入创建

2.npm init命令自动创建

npm init -y || npm init --yes 快速生成默认的package.json文件

在这里插入图片描述
npm init 会生成一个package.json文件
在这里插入图片描述

配置项

name 项目名称(包名)

name和version字段是package.json文件中最重要的字段,都是必须的字段,如果你的npm包没有指定这两个字段,将无法被安装。name和version字段被假定组合成一个唯一的标识符,包内容的更改和包版本的更改是同步的。
长度必须小于等于214个字符,不能以"."(点)或者"_"(下划线)开头,不能包含大写字母。

version 版本号 (遵守“大版本.次要版本.小版本”的格式)

npm采用"语义版本"管理软件包。所谓语义版本,就是指版本号为x.y.z的形式,其中x是大版本号,y是小版本号(功能),z是补丁号(修复bug)。

description 项目描述

description是一个字符串,描述你的模块,它可以帮助人们在使用npm search时找到这个包。

keywords 关键字

keywords是一个字符串的数组,它可以帮助人们在使用npm search时找到这个包。

author 作者

项目开发者,它的值是你在https://npmjs.org网站的有效账户名,遵循“账户名<邮件>”的规则,例如:zhangsan zhangsan@163.com。

contributors - 包的其他贡献者

homepage 项目包的官网 URL

main 项目默认执行文件

main 字段指定了程序的主入口文件,require(‘moduleName’) 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
比如 require(‘webpack’);就会默认加载 lib 目录下的 webpack.js 文件,如果没有设置,则默认加载项目跟目录下的 index.js 文件。

dependencies 依赖包列表(生产环境)

dependencies字段是一个对象,它指定了项目运行时依赖的模块名和版本范围映射。生产环境下,项目运行所需依赖。
如果依赖包没有安装,npm会自动将依赖包安装在node_ module目录下。

devDependencies 依赖包列表(开发环境)

devDependencies字段是一个对象,它指定了项目开发时依赖的模块名和版本范围映射。如果有人要用你的模块,但他们可能不需要你开发所使用的外部测试或者文档框架。开发环境下,项目所需依赖。

repository 项目仓库地址

包代码存放的地方的类型,可以是git或svn, git 可在Github上。

scripts:执行 npm 脚本命令简写

scripts指定了运行脚本命令的npm命令行缩写,比如 “start”: “react-scripts start”, 执行 npm run start 就是运行 “react-scripts start”。

license 许可证

软件授权条款,让用户知道他们的使用权利和和任何限制。BSD-3-Clause,MIT,ISC是通用许可证。

bin:内部命令对应的可执行文件的路径。

engines:项目运行的平台、node,npm版本限制

指明了该模块运行的平台, 比如node的版本、安装这个包的npm版本

{
"node": ">= 4.0.0",
"npm": ">= 3.0.0"
}

private:是否私有

设置"private": true时,npm会拒绝发布当前包。

config向环境变量输出值

config字段用于向环境变量输出值。

browserslist:供浏览器使用的版本列表

浏览器限制

{ "> 1%"}

style样式文件所在的位置

style指定供浏览器使用时,样式文件所在的位置。样式文件打包工具parcelify,通过它知道样式文件的打包位置。

files:被项目包含的文件名数组。

files字段是一个被项目包含的文件名数组,如果你在里面放一个文件夹名,那么这个文件夹中的所有文件都会被包含进项目中(除非是那些在其他规则中被忽略的文件)。你还可以在包的根目录或子目录下提供一个".npmignore"文件来忽略项目包含文件,即使这些文件被包含在files字段中。.npmignore文件和.gitignore的功能很像。

bugs:bug 提交地址

项目的提交问题的url和(或)邮件地址,这对使用该包遇到问题的用户会有帮助。可以择其一或者两个都写上,如果只想提供一个url,你可以对"bugs"字段指定一个字符串而不是object。如果提供了一个url,它会被用于npm bugs命令。

{ 
 "url" : "https://github.com/owner/project/issues",
 "email" : "project@hostname.com"
}

package.json与package-lock.json

  • package.json记录当前项目所依赖模块的版本信息,更新模块时锁定模块的大版本号(版本号的第一位)

当你执行 npm i时,nodeJS会从你的package.json中读取所有的dependencies信息,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

  • package-lock.json文件锁定所有模块的版本号(包括主模块和所有依赖子模块)

package-lock.json记录了node_modules目录下所有模块的具体来源和版本号以及其他的信息。package-lock.json里会维护一个依赖管理树,里面记录着每个依赖的确定版本, 获取地址和哈希值等信息,这样就保证了每次安装下载的依赖版本都是一样的。
如果想要更新依赖的版本号,需要使用 npm install xxx@1.0.0 --save 这种方式来进行版本更新,这样 package-lock.json 文件才可以中也会对应做更新。

dependencies与devDependencies的区别

dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发所需要的模块。
它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。

  1. dependencies:运行时的依赖,发布后,即生产环境下还需要用的模块.即正常运行该包时所需要的依赖项。
  2. devDependencies:开发时的依赖。里面的模块是开发时用的,发布时用不到它,比如项目中使用的gulp,压缩Css、js的模块。这些模块在我们的项目部署后是不需要的

版本号

package.json文件中版本号的说明,安装的时候代表不同的含义:
"5.0.3"表示安装指定的5.0.3版本
"~5.0.3"表示安装5.0.X中最新的版本
"^5.0.3"表示安装5.X.X中最新的版本

对应的版本可以加上各种限定,主要有以下几种:

  1. 不使用任何符号-指点版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
  2. 波浪号(tilde)+指定版本(使用~): 比如 ~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
  3. 插入号(caret)+指定版本(使用^**):比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。

注意:语义版本号

使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,
语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。

如果只是修复bug,需要更新Z位。
如果是新增了功能,但是向下兼容,需要更新Y位。
如果有大变动,向下不兼容,需要更新X位。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值