package.json理解
package.json配置
private
- 如果你在你的package.json中设置了“private”:true,那么npm将拒绝发布它。 这是防止私人存储库意外发布的一种方法。【防止意外发布】
workspaces:
- yarm提供的,可共享node_mudules
browserslist:
-
指定了项目的目标浏览器的范围, 这个值会被 @babel/preset-env 和 Autoprefixer 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。 【可以提供统一的配置。即共享项目中的目标浏览器环境信息】
-
参考vue-cli的browserslist配置
"browserslist": [
"> 1%", //支持市场份额大于 1% 的浏览器。
"last 2 versions", //支持各类浏览器最近的2个版本,当然这里的 2 是可变的数字
"not dead" //not 是逻辑非操作符,即对 dead取反,而浏览器被认为是 dead 条件是:最新的两个版本中发现其市场份额已经低于 0.5% 并且 24 个月内没有任务官方支持和更新了
]
resolutions
- yarn提供的resolutions统一依赖版本字段
license
译为许可证【开源协议】。理解为协议或版权声明,违反协议的后果就是商业纠纷
- 参考阮一峰:http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
- 图里少了ISC, ISC和BSD差不多
- ISC: 人们可以对您的代码进行任何操作,并带有适当的署名且不提供担保。 ISC许可证在功能上等同于 BSD 2条款和 MIT 许可
- MIT:简单来说,他人允许修改源码且可以闭源,每修改过的文件,可以不用放置版权说明,广告之类的,可以使用作者名字促销
main
- 指向库的入口文件
- 指向源代码的入口
- 指向打包后的入口
- 作用:定义 CommonJS 模块的默认入口文件
module
- 定义了 ESM 规范的入口文件,browser 环境和 node 环境均可使用
exports
-
exports定义了自定义导出规则,可以理解为路径映射
-
控制包的模块入口
-
ts类型需要配置typesVersions
场景:
- 结合Monorepo, 子包的
exports字段与workspace:*依赖的结合,实现了 模块入口的精细化控制 和 本地依赖的实时同步
"exports": {
".": "./src/index.ts"
},
"typesVersions": {
"*": {
"*": ["./src/*"]
}
},
typesVersions
- 当包通过
exports字段定义 多入口 或 条件导出 时,TypeScript 无法仅通过传统的types或@types包推断出所有导出路径对应的类型声明文件,因此可通过typesVersion来控制类型 typesVersions是一个键值对对象,键为 TypeScript 版本范围,值为 路径映射规则
"typesVersions": {
"*": { // TypeScript 版本范围
// * 匹配包的所有导出路径
"*": ["./src/*"] // 路径映射规则
}
}
- 根据
exports字段联动配置
{
"exports": {
".": "./dist/index.js",
"./utils": "./dist/utils.js"
},
"typesVersions": {
"*": {
".": ["./dist/types/index.d.ts"],
"./utils": ["./dist/types/utils.d.ts"]
}
}
}
types
- 定义了类型文件声明
files
- 描述你
npm publish后推送到npm服务器的文件列表,如果指定文件夹,则文件夹内的所有内容都会包含进来。我们可以看到下载后的包是下面的目录结构:
另外,你还可以通过配置一个
.npmignore文件来排除一些文件, 防止大量的垃圾文件推送到npm, 规则上和你用的.gitignore是一样的。.gitignore文件也可以充当.npmignore文件。
mian、module、exports区别
- 优先级:
exports>module>main - 如果未定义任何字段,默认尝试加载
index.js。
scripts设置命令传参
- 通过$1、$2 等等占位符
package.json配置
"scripts": {
"add:client": "bun add --cwd packages/client $1"
}
执行
bun add:client lodash-es -D