package.json中的字段详解

基于的npm版本为8.x。

1、name

npm包的名字,如果你打算发布你的包,name是必填的字段,如果你不打算发布你的包,那么name字段是可选的。一个npm包是由名字加版本作为唯一标识的。

npm包的名称必须要小于等于214个字符,除了范围包之外的npm包名称不允许以'.'和'_'开头,名称中不能有大写字母,由于包名称也是URL中的一部分,所以不能包含任何非URL安全字符。

另外官方建议我们不要和node的某些核心模块取一样的名称,包名中不要有js以及node这样的字符。由于我们是需要通过包名引入包,所以包名最好是简短的,描述性合理的。

如果你想要知道包名是否已经被占用,可以去npm官网进行搜索。

2、version

npm包的版本号,关于版本号的说明可见npm包版本管理

3、description

npm包的描述,它将展示在npm包的搜索列表里,帮助其它的开发者在npm上找到你的包。

4、keywords

npm包的关键字,是一个字符串数组,它也会展示在npm包的搜索列表里,用来帮助其它的开发者在npm上找到你的包。

5、homepage

npm包的主页地址

6、bugs

你的项目提issue的地址,或者提供一个邮箱地址可以提交问题。如下:

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

也可以只写其中一项,如果只写一项的话可以直接使用字符串。

7、license

你需要给你的npm包声明一个许可证,来让用户知道他们的使用权利和限制。许可证类型可见七种开源许可证

8、people fields: author, contributors

npm包的作者及参与贡献人员。author是单个,contributors是数组。

9、funding

npm包的赞助信息。

10、files

files是一个可选项,形式为数组,它描述了你npm publish的时候推送到npm服务器的文件列表,支持目录和通配,相反的,你可以使用.gitignore或者.npmignore来排除不需要上传的文件。

无论怎么设置,有些文件会始终被包含,比如:

  • package.json
  • README
  • LICENSE / LICENCE
  • The file in the "main" field

相反的,有些文件总是会被排除,比如:

  • .git
  • CVS
  • .svn
  • .hg
  • .lock-wscript
  • .wafpickle-N
  • .*.swp
  • .DS_Store
  • ._*
  • npm-debug.log
  • .npmrc
  • node_modules
  • config.gypi
  • *.orig
  • package-lock.json (use npm-shrinkwrap.json if you wish it to be published)

11、main

npm包的入口文件,比如你的包名为foo,用户安装了这个包,通过require(foo)导入的时候,实际上导入的就是main字段的入口文件。如果这个字段没有设置的话,入口文件就默认为根目录下的index.js文件。

12、browser

如果要在客户端使用模块,则应使用brower字段来代替main字段。

13、bin

该属性定义了一系列可执行命令,例如:

"bin": {
    "myapp": "./cli.js"
}

上述表示该npm包定义了一个命令myapp,执行文件为与命令定义文件同级目录下的cli.js。局部安装该包后,可执行文件会在./node_modules/.bin下。全局安装该包后,可执行文件会在$PATH里对应npm的目录下。

14、man

这里是manuel,是手册的意思,指定一个或多个文件,文件名必须已数字结尾,如果是压缩的,需要以.gz结尾,它用于执行man <pkgname>时,展现给用户的手册内容。

15、directories

用来展示项目的目录结构信息,字段可以是:libbinmandoc,值都是字符串。

16、repository

包的仓库地址。如下:

"repository": {
    "type": "git",
    "url": "https://github.com/npm/cli.git"
}

17、scripts

scripts用来定义脚本命令,如下:

"scripts":{
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build"
}

则当你在终端输入npm run serve命令的时候就会运行该包,输入npm run build的时候就会执行打包操作。

除此之外,还可以定义一些钩子,比如:

"scripts":{
    "prebuild": "{可以定义build之前要执行的操作}",
    "preinstall": "{可以定义install之前要执行的操作}"
}

具体的可以看scripts

18、config

添加一些配置,可以供scripts读取用,同时这里的值也会被添加到系统的环境变量中。

"config": {
  "port": "8080"
}

npm start的时候会读取到npm_package_config_port环境变量。

19、dependencies

项目运行时所需要的依赖。

20、devDependencies

项目开发时所需要的依赖。

21、peerDependencies

相关的依赖。以上三种依赖的差异可见dependencies、devDependencies、peerDependencies的区别

22、peerDependenciesMeta

当我们安装了peerDependencies中的依赖,但是版本不一致时,npm会报错,这个时候我们可以采用该字段来给peerDependencies配置更多的信息。如下:

{
  "name": "tea-latte",
  "version": "1.3.5",
  "peerDependencies": {
    "tea": "2.x",
    "soy-milk": "1.2"
  },
  "peerDependenciesMeta": {
    "soy-milk": {
      "optional": true
    }
  }
}

当我们把soy-milk依赖配置成可选的,则安装版本不一致时,npm不会报错。

23、bundledDependencies

绑定的依赖包,发布的时候这些绑定包也会被一同发布。绑定包必须是dependenciesdevDependencies中声明过的包。

24、optionalDependencies

安装依赖的时候,放在optionalDependencies中的包即使安装失败,也不会报错终止安装操作。

25、overrides

如果你需要对依赖项中的依赖的版本进行修改,可以使用该字段。

26、engines

指定包运行的环境,如下:

"engines": {
  "node": ">=0.10.3 < 0.12",
  "npm": "~1.0.20"
}

但是该字段只是建议性的,不满足的时候只会报warning

27、os

指定你的包可以在哪些系统平台下运行,如下:

"os": [ "darwin", "linux", "!win32" ]

28、cpu

指定包运行的cpu架构,如下:

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

29、private

该字段设置为true的话,你的包就不会发布到npm平台。

30、publishConfig

发布时的一些设定。比如说要发布到的npm仓库地址,要标记的tag等。可参考config

31、workspaces

该字段是一个可选的,形式为数组,定义工作区,如下:

"workspaces": [
    "./packages/*"
]

只要packages下的文件夹中有有效的package.json文件,都会被视为一个工作区。可参考workspaces

参考

1、package.json里的一些属性讲解
2、package.json中的每一个字段你都了解了吗
3、npm中package.json详解
4、package.json

posted @ 2022-01-27 16:51  SummerSatr  阅读(582)  评论(0编辑  收藏  举报