package.json配置详解

294 阅读3分钟

1.指定入口文件

当package被外部引入时import name from "myLib",指定默认入口文件。相同功能的配置项还有browsermodule,这个没必要记!vite|webpack等一些工具也会增加一些自己的字段。main和export是比较通用的,关注即可

main:"index.js", // 标准格式

// 推荐:指定不同引入方式的入口文件 设置export后会忽略main
export:{
    import:"/inde.mjs",
    require:"/index.cjs"
}

export还可以指定多个输出目录

export:{
    ".":"/index.js", // 设置多个输出目录后就不能设置import和require字段了
    "./sub":"/sub/index.js"
}
// 外部使用效果
import lib from "lib"; // 最终引入/index.js
import sub from "lib/sub";// 最终引入/sub/index.js

2.指定.d.ts申明文件

被外部引入时,指定的申明文件自动引入,实现在ts中的类型申明

types:"./index.d.ts"

3.生成全局命令

如果想让你的package像vite一样,在install之后可以在命令行中使用vite命令,那么可以在bin字段指定。 它会在全局或者局部(node_modules)中创建一个命令脚本,这取决你怎么去安装npm install -g|none

bin:{
    "yourVite":"./bins/yourCli.js",// 指定命令执行的脚本
}

这样install后就可以在命令行中使用了

> yourVite -v

4.指定包开发时的模块格式

type指定包中的源码在运行时的模块格式

type:"module|commonjs" // module为esm风格 commonjs为cmd风格

5.工作空间

工作空间workspace在进行依赖项目开发时非常好用:比如开发类库时,需要实时看到类库改动后,在项目使用中的效果,就可以使用workspace。

它比较复杂和强大,这里单独用一篇文章来说明他使用和适用场景

6.依赖安装

dependenciesdevDependencies可以说是很熟悉的字段

  • dependencies:表示必须的依赖,使用npm i 安装的依赖会记录在此
  • devDependencies:表示开发阶段的依赖,使用npm i -D | --save-dev安装的依赖会记录在此
dependencies:{},
devDependencies:{}, // 在npm i --production 时会跳过安装

6.发包常用控制字段

#s 指定包名
name:"package-name",
#s 指定版本
version:"1.0.0",
#s 功能描述
description:"文字描述",
#s 指定发布包中包含的文件,如果不想暴漏过多的源码可如此设置
files:["dist"],//包含指定文件
exclude:[".env"],//排除指定文件
#s 指定开源协议
license:"ISC", //不同的协议可控制别人拿到你的包之后是否可以二次开发、商用等
#s 搜索关键字
keyword:["cli","vue",...],
#s 指定依赖版本
engines:{
    "node":">=18.0.0",
    "npm":">=8.0.0"
},
#s 包主页,npm网站会自动解析展示
homepage:"https://www.xxx.com",
#s 作者信息,npm网站会自动解析展示
author:{
    "name":"your name",
    "email":"your email",
    "url":"http://...",//作者的主页
},
contributors:[
    {name:"",email:""},//贡献人员
],
#s 指定bug反馈地址 npm网站会自动解析展示
bugs: {
    "url": "https://github.com/user/my-awesome-package/issues",
    "email": "support@my-awesome-package.com"  // 可选 不建议可能会收到大量垃圾邮件
},
#s 指定源码网站 npm网站会自动解析展示,这样别人就能知道在哪里看源码
repository: {
    "type": "git",           // 版本控制系统类型(通常为 git)
    "url": "https://github.com/user/repo.git",  // 仓库 URL
    "directory": "packages/submodule"  // 可选:如果包是 monorepo 中的子模块
  }