package.json
俗称 依赖配置文件(我本身取的名),最主要的做用就是,管理项目中所用到的依赖。它自己的做用是为 node.js 模块服务的,模块有不少属性,为了描述模块的特性,package.json
也被称做模块的 描述文件
。html
name
和 version
是 package.json
中最重要的两个属性,并且是必填的。这两个属性一块儿就造成了 npm 模块惟一标识符。分别表示 模块的 名称 和 版本。名称通常不会变,版本会随着模块的修改而更新变更。前端
这两个字段都是用来在 npm
官网上搜索的, 区别是一个是字符串, 一个是字符串数组。node
这两个属性,都是用来记录项目中所用到的依赖。区别是,一个是用来记录开发环境所用的依赖,一个是记录生产环境所用到的依赖。git
好比,对于大多数前端项目来讲,gulp
等构件工具及插件,可能只在开发环境中使用,而在生产环境只关心最终生成的 dist
文件,因此,gul
p 等插件 就应该放在 devDependencies
下。npm
经过 npm i xxx -save
、npm i xxx -s
、yarn add xxx -S
安装的依赖会添加到 dependencies
下;json
经过 npm i xxx -save-dev
、npm i xxx -d
、yarn add xxx -D
安装的依赖会添加到 devDependencies
下;gulp
可让宿主环境拥有某个特定版本的依赖数组
前提:项目X
依赖 模块A
, 模块A
依赖 模块B
插件
状况一:若是 模块B
定义在 模块A
的 dependencies
字段中
结果:模块B
只能被 模块A 引用
;
可能的好处:假如 项目X 也依赖 模块B,版本不同,则能够互不干扰。
可能的坏处:假如 项目X 也依赖 模块B,且版本同样,则会有两个如出一辙的 模块B
项目X └──node_modules/ └── 模块A └──node_modules/ └── 模块B
状况二:若是 模块B
定义在 模块A
的 peerDependencies
字段中
结果:项目X
也会下载 或 检查 模块b
的版本。
可能的好处:假如 项目X 也依赖 模块B,版本不同,则会在控制台以警告的形式提示版本问题。
可能的坏处:假如 项目X 也依赖 模块B,且版本同样,只用下载一遍。
项目X └──node_modules/ ├── 模块a └── 模块b
结论:定义在 peerDependencies
中的依赖,在宿主环境中,也会被下载 或 被检查版本。
files
是一个包含项目中的文件的数组。若是命名了一个文件夹,那也会包含文件夹中的文件。(除非被其余条件忽略了 .npmignore .gitignore)
在 npm publish
的时候,会依据这个配置 上传你的文件。
scripts
是一个由脚本命令组成的 kye value 对象。