package.json解析
发表于:2023-11-03 | 分类: 学习

结构

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
32
33
34
35
36
37
{
"name": "test",
"version":"0.0.1",
"description": "test",
"keywords":["node.js","antd", "theme"],
"homepage": "https://zhiqianduan.com",
"bugs":{"url":"http://path/to/bug","email":"test@xxxx.com"},
"license": "ISC",
"author": "test",
"contributors":[{"name":"test","email":"test@xxxx.com"}],
"files": "",
"main": "./dist/default.js",
"bin": "",
"man": "",
"directories": "",
"repository": {
"type": "git",
"url": "https://path/to/url"
},
"scripts": {
"start": "webpack serve --config webpack.config.dev.js --progress"
},
"config": { "port" : "8080" },
"dependencies": {},
"devDependencies": { },
"peerDependencies": {
"tea": "2.x"
},
"bundledDependencies": [
"renderized", "super-streams"
],
"engines": {"node": "0.10.x"},
"os" : [ "win32", "darwin", "linux" ],
"cpu" : [ "x64", "ia32" ],
"private": false,
"publishConfig": {}
}

字段详细

  • name字段

    • 必须小于等于 214 个字符,不能以._开头,不能有大写字母,因为名称最终成为 URL 的一部分因此不能包含任何非 URL 安全字符
  • version字段

    • version一般的格式是x.x.x, 并且需要遵循该规则。
  • discription字段

    • description是一个字符串,用于编写描述信息。有助于人们在npm库中搜索的时候发现你的模块。
  • keywords字段

    • keywords是一个字符串组成的数组,有助于人们在npm库中搜索的时候发现你的模块。
  • homepage字段

    • homepage项目的主页地址。
  • bugs字段

    • bugs用于项目问题的反馈 issue 地址或者一个邮箱。
  • license字段

    • license是当前项目的协议,让用户知道他们有何权限来使用你的模块,以及使用该模块有哪些限制。
  • author字段

    • author是具体一个共享者
  • contributors字段

    • contributors表示一群共享者
  • files字段

    • files属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是文件夹名,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
  • main字段

    • main字段指定了加载的入口文件,require导入的时候就会加载这个文件。这个字段的默认值是模块根目录下面的index.js
  • directories字段

    • directories制定一些方法来描述模块的结构, 用于告诉用户每个目录在什么位置。
  • repository字段

    • 指定一个代码存放地址,对想要为你的项目贡献代码的人有帮助
  • scripts字段

    • scripts指定了运行脚本命令的 npm 命令行缩写,比如 start 指定了运行 npm run start 时,所要执行的命令。
  • config字段

    • config字段用于添加命令行的环境变量。
  • dependencies字段

    • dependencies字段指定了项目运行所依赖的模块。
  • devDependencies字段

    • devDependencies指定项目开发所需要的模块。
  • peerDependencies字段

    • peerDependencies字段,是用来供插件指定其所需要的主工具的版本。
  • bundledDependencies字段

    • bundledDependencies指定发布的时候会被一起打包的模块.
  • engines字段

    • engines字段指明了该模块运行的平台,比如Node或者npm的某个版本或者浏览器。
  • os字段

    • 可以指定你的模块只能在哪个操作系统上运行
  • cpu字段

    • 限制模块只能在某种架构的cpu下运行
  • private字段

    • 如果这个属性被设置为truenpm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。
  • publishConfig字段

    • 这个配置是会在模块发布时生效,用于设置发布用到的一些值的集合。如果你不想模块被默认标记为最新的,或者默认发布到公共仓库,可以在这里配置 tag 或仓库地址。
  • browser字段

    • browser指定该模板供浏览器使用的版本。Browserify这样的浏览器打包工具,通过它就知道该打包那个文件。

入口文件详解

  • main

    • main 是最为基础且古老的入口字段,由 Nodenpm 定义。当 main 字段都不存在时,通常会使用 index.js 作为入口。
    • 使用方法:
      {
      "main": "./index.js"
      }
  • module

    • module 字段提供符合 ESM 规范的模块入口。
    • 使用方法:
      {
      "module": "./index.esm.js"
      }
  • browser

    • browser 字段提供对浏览器环境更友好的模块入口。

    • 使用方法:
      {
      "browser": "./index.browser.js"
      }

      browser(字符串) 将代替 main, module

  • exports

    • exports 字段允许通过访问路径、运行环境(node/browser 等)、模块类型(require/import/types/css 等)组合确定最终的入口文件。

      运行环境与模块类型的支持,Node 及打包工具之间的实现均有差异。

      exports 是对外提供多个入口,还有另一个字段 imports 是对内修改依赖(有点像 browser)。

优先级

  • Node 环境

    1. exports

    2. main

      Node 不支持其他字段,所以非常简单。打包工具则是基于 Node 的标准进行扩展的。

  • Webpack 环境

    1. browser

    2. exports

    3. browser(字符串)

    4. module

    5. main

      若构建目标不是 Web,则跳过 browser 字段。

      Webpack 会尽可能尝试去获得一个可以用的文件。

  • Vite

    1. browser(对象)

    2. exports

    3. browser(字符串),当 browser 获得的文件不是 ESM 模块时,module 优先级会提升到 browser 之前。

    4. module

    5. main

      若构建目标不是 Web,则跳过 browser 字段。

      Vite 会按优先级获得路径后,再尝试获得文件,若获得不到则抛出错误。

上一篇:
package.json 中的 dependencies
下一篇:
typescript 学习