package.json各个字段解读

package.json是npm基于CommonJS规范的对包描述文件的定义,做了一些细节改变的npm包描述文件。

以下,带 的是可选字段,其他必须字段。

name 包名

由小写字母、数字和.-_组成,不允许出现空格。包名必须是唯一的,且建议不添加js和node字段来标识是js模块。

description * 包描述。

当使用npm search命令时会搜索这个字段。

version 版本号

语义化的版本号,通常为主版本号.次版本号.修订号格式。

主版本号:当做了不兼容的API修改

次版本号:当做了向下兼容的功能性新增

修订号:当做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到版本号后面,作为延伸。如1.2.3-release。

keywords * 关键词

关键词作为数组存在,用于NPM中分类搜索,所以准确的关键词设定,有利于用户快速找到你的包。当使用npm search命令时会搜索这个字段。

maintainers * 包维护者列表

每个维护者由name,email,web三个属性组成,如:

NPM通过该属性进行权限认证。

author * 作者

作者是一个人。

contributions * 贡献者列表

开源项目中,社区中人参与度比较高,对当前包贡献代码的可以添加进这个列表,一般第一个是作者,这个格式与维护者列表一样。

bugs * 一个可以反馈bug的地址或邮件地址。

npm bugs用的上。

licenses * 许可证列表repositories * 托管代码的位置列表config * 配置对象

Config对象中的值在Scripts的整个周期中皆可用,专门用于给Scripts提供配置参数。

homepage * 网站地址

没有http://等带协议前缀的URL。

engine * 支持的Javascript引擎列表engineStrick *

布尔值。如果你肯定你的程序只能在制定的engine上运行,设置为true。

Os *

。指定模块可以在什么操作系统上运行:

"os" : [ "darwin","Linux" ]

"os" : [ "!win32" ]

CPU *

指定CPU型号。

"cpu" : [ "x64","ia32" ]

"cpu" : [ "!arm","!mips" ]

directories * 目录说明bin * 添加命令

这个指令给当前包添加命令的,可以在命令行工具执行。当全局安装时,可以全局调用命令,当本地安装,可以在本地调用命令。

mian * 入口地址

当用户使用require引用模块时,,会优先使用这个字段,当没有没这个字段时,会查找包根目录下的index(.js/.node/.json)文件。

scripts * 脚本说明对象

npm scripts 是写在package.json中scripts字段定义的脚本命令。

使用npm run script来执行脚本。优点:

项目的相关脚本,集中放置管理。

不同的脚本命令,只要功能相同就可设定同一对外接口

可以利用npm的很多辅助功能。

原理

每当执行npm run,就会创建一个Shell,在Shell里执行指定的脚本,所以只要是Shell可执行的命令,就可以写在npm中。当创建Shell时,会将node_modules/.bin子目录加入PATH中,执行完再恢复PATH。所以scripts中的脚本命令,不需要添加路径,可以直接写命令。

npm脚本的退出码,遵守Shell脚本规则。如果退出码不是0,npm就认为执行这个脚本时报。

通配符

npm可以使用Shell通配符。如:

但是如果要对原始命令使用通配符,要使用 转义。

传参

npm脚本传参,使用 标识。也可以再度封装命令。

执行顺序

并行执行 顺序执行,还可以使用script-runner、npm-run-all、redrun等任务管理模块。

默认值

npm提供两个默认脚本

第一个需要当前目录下有server.js文件,第二个需要当前目录下有binding.gyp文件。

钩子

npm脚本有pre和post两个钩子。

执行 会按照这个执行

所以可以使用钩子执行一些准备和联合操作。默认提供的钩子:

publish

install

uninstall

version

test

stop

start

restart 自定义的命令也可以添加pre和post钩子,不过双重的prepre和postpost无效 npm还提供一个npmlifecycleevent变量,返回当前执行脚本的名称,所以可以利用这个变量,在一个脚本文件内,为不同的scripts命令编写代码。如

简写形式

npm start

npm test

npm start

npm restart (会执行三个命令 npm run stop && npm run restart && npm run start ) 执行顺序为 prerestart > prestop > stop > poststop > restart > prestart > start > poststart > postrestart

变量

npm脚本有一个非常强大得功能,可以使用npm内部变量

首先,通过npm_package前缀可以获取到package.json里面的字段。

使用npmconfig可以拿到npm的配置变量,如npmconfig_tag拿到发布标签,package.json的config的变量会被环境变量覆盖。

会被

evn命令会列出所有环境变量

dependencies * 依赖列表

当前包使用所依赖的列表。使用npm install --save 会添加包名到这个列表。

版本格式

version 完全匹配

大于这个版本

大于或等于这个版本

~version 非常接近这个版本

^version 与当前版本兼容

1.2.x X代表任意数字,因此1.2.1, 1.2.3等都可以

http://... Unix系统下使用的tarball的URL。

任何版本都可以

""任何版本都可以

version1 - version2 等价于 >=version1

range1 range2 满足任意一个即可

git... Git地址

user/repo

devDependencies * 开发依赖列表

在开发包时依赖的包列表。使用npm install --save-dev 会添加包名到这个列表。

peerDependencies *

兼容性依赖。如果你的包是插件,适合这种方式。

bundledDependencies *

。发布包时同时打包的其他依赖。

optionalDependencies *

如果你想在某些依赖即使没有找到,或则安装失败的情况下,npm都继续执行。那么这些依赖适合放在这里。

相关参考

npm换源与管理源

package.json中 npm依赖包版本前的符号的意义

极客教程

分享编程知识

关注,每天推送好内容!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G0128L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券