npm发包相关的packagejson配置说明

将自己的项目上传至npm上时,需要正确设置packagejson中的相关字段,否则会导致上传的项目无法正确在其他地方引用,甚至无法上传至npm官网。

1. name

  • name是整个项目的名称,也是在npm仓库中的唯一索引,当别人下载自己上传的npm包时,其关键字索引便是项目名称。
yarn add axios # axios 便是项目名称

2. version

  • version是版本号,它是一个字符串,每次发版时都要更新该字段。
    • 版本号的编写遵循语义化版本 2.0.0 规范,即**「主版本号. 次版本号. 修订号」**

3. main

  • 指定加载的入口文件,node端和web端都可以使用,当外部使用require来引入npm包时,main指定的文件将以module.export的形式对外暴露。
  • 所以一般情况下,main文件都会指向commonjs规范的文件,如下所示。
  • mjs文件代表commonjs规范的js文件。
{
  "main": "dist/index.cjs"
}

4. module

  • 与main不同的是,module指定的是ESM规范的文件入口,web端和node端都可以使用,如果npm包导出的是ESM规范的包,则需要该字段来指定入口文件。
  • mjs代表是ESM规范的js文件。
{
  "module": "dist/index.mjs"
}

5. type

  • type用于指定该node项目遵循ESM规范还是Commonjs规范,默认为commonjs项目,若要设置项目为ESM规范,则需要赋值module。
{
  "type": "module"
}
  • 同时当项目是ESM规范时,需要指定入口文件,即设置module字段。

6. types

  • 指定声明文件位置,即d.ts文件。

7. files

  • files字段接收一个数组,用来指明在发布npm包时,哪些文件需要上传至npm服务器上。或者说,用来描述当把 npm 包作为依赖包安装时需要说明的文件列表。
  • 需要说明的是,如果有文件不想上传到npm服务器上,可以用.npmignore来说明哪些文件不需要上传(和.gitignore类似)