中高级前端必须掌握的package.json最新最全指南
package.json 是一个用于描述和配置项目的重要文件,其中包含了许多字段和选项,可以影响项目的构建、依赖管理、脚本执行等方面。了解这些字段可以帮助开发者更好地理解和控制项目的行为。
package.json对于大部分前端开发者来说,知道dependencies与devDependencies就够了。但对于库开发者或有更高级需求的开发者来说,了解 package.json 的其他字段是非常有必要的。
本文介绍的字段分为官方字段与非官方字段。非官方字段是被主流打包工具(webpack,Rollup)所支持, 旨在提供更高级的配置和功能,以满足特定的构建需求,可能不具备通用性。
目前版本:v7.24.2
一、必须属性1. name定义项目的名称,不能以"."和"_"开头,不能包含大写字母
2. version定义项目的版本号,格式为:大版本号.次版本号.修订号
二、描述信息1. description项目描述
2. keywords项目关键词
3. author项目作者
项目贡献者
项目主页地址
6. repository项目代码仓库地址
7. bugs项目提交问题的地址
指定项目的资金支持方式和链接
生产环境的依赖包
如果不使用脱字符(^),安装的版本号固定;如果使用,则能安装当前大版本的最新版本,在package-lock.json中可查看当前实际安装的版本。
2. devDependencies开发环境的依赖包,例如webpack、vite、babel、ESLint等。
3. peerDependencies对等依赖的作用:
- 减小打包体积:例如使用react开发的组件库,安装react是必不可少的,而使用组件库的开发者,本地项目肯定安装了react,因此开发的组件库中不必把react打包进去(期望项目的使用者来提供这些模块的实现)。
- 版本一致性:使用你的组件库的开发者需要确保他们项目中安装了与你声明的对等依赖版本兼容的包,以确保组件库正常运行。
示例:声明要使用组件库,需在项目中安装大于17.0.1版本的react
将对等依赖标记为可选,如果用户没有安装对等依赖,npm不会发出警告
声明捆绑依赖项(使用情景较少)
6. optionalDependencies声明可选依赖项(使用情景较少)
7. engines声明对npm或node的版本要求
目前对NPM来说,engines只是起一个说明的作用,即使用户安装的版本不符合要求,也不影响依赖包的安装。但使用pnpm 和 yarn安装,如果版本不符合要求会导致安装失败。
8. workspaces单个代码库中统一管理多个包(monorepo),在workspaces声明目录下的package会软链到根目录的node_modules中。
1. 初始化项目表示所有子包都在packages文件夹下
3. 创建子包p1在node_modules/.package-lock.json中可以看到 "link": true 链接符号信息
4. 新建packages/p1/index.js安装,卸载等命令都是一样的,只是多了"--workspace="参数(简写-w),用来指定在哪个包中执行命令
7. 子包p2使用p1workspaces功能与lerna类似,如果只需简单地管理多个包,workspaces足够了。lerna具有版本管理,发包提示,简化多包项目发布流程等更多功能。
四、脚本配置1. scripts脚本入口
2. config用于定义项目的配置项,例如设置环境变量
1. config 配置运行 npm run start,终端打印出 example.com
五、文件&目录1. module(非官方字段)指定 ES 模块入口文件
示例:当其他开发者在他们的项目中导入你的包时,会加载并执行包中的dist/index.esm.js
指定 CommonJS 模块或 ES 模块入口文件。如果不指定该字段,默认是根目录下的index.js
提示:从 Node.js 12.20.0 版本开始,"main" 字段也可以指定 ES 模块的入口文件
3. browser指定浏览器使用的入口文件,例如umd模块。
4. types(非官方字段)指定 TypeScript 类型声明文件(.d.ts 文件)的路径
5. exports(非官方字段)当打包工具支持exports字段时(webpack、Rollup 等),以上main,browser,module,types四个字段都被忽略
"." 表示默认导出
"import": 指定了 ES module (ESM) 规范下的导出文件路径
"require": 指定了 CommonJS 规范下的导出文件路径
"browser": 指定了用于浏览器环境的导出文件路径
"types": 指定了类型声明文件的路径
导出其他文件,例如除了导出默认路径,导出源文件
其他项目中使用
指定模块系统的使用方式,"commonjs","module","umd","json"
示例:指定模块系统为ES module模式,使用CommonJS文件时,需显式的定义为 .cjs 文件扩展名,来明确指定这些文件为 CommonJS 模块
指定哪些包被推送到npm服务器中
示例:只推送index.js和dist包到npm服务器
可以在项目根目录新建一个.npmignore文件,说明不需要提交到npm服务器的文件,类似.gitignore。写在这个文件中的文件即便被写在files属性里也会被排除在外
8. bin定义在全局安装时可执行的命令,例如构建脚手架
Linux 中的帮助指令(使用情景较少)
10. directories定义项目目录结构的字段(使用情景较少)
六、发布配置1. private防止私有包发布到npm服务器,要发布到npm上设为false
2. preferGlobal(非官方字段)当设置 "preferGlobal" 字段为 true 时,它表示你的包更适合以全局方式安装,而不是作为项目的依赖项进行本地安装。
这个字段的设置是为了向用户传达关于你的包的最佳使用方式的建议。它并不会直接影响包的安装方式或包管理器的行为。
3. publishConfig在发布包时指定特定的配置
示例:指定包发布的注册表 URL,指定所有用户都可以访问(私有的会收费)
指定你的包适用的操作系统
示例:包只适用于darwin(macOS)和 linux
示例:禁用win32
该配置和OS配置类似,用CPU可以更准确的限制用户的安装环境
6. license指定软件的开源协议:
ISC:在所有副本中保留版权声明和许可证声明,使用者就可以拿你的代码做任何想做的事情,你也无需承担任何责任
MIT:在所有副本或主要部分中保留版权声明和许可证声明,使用者就可以拿你的代码做任何想做的事情,你也无需承担任何责任
开源协议查询地址:opensource.org/licenses/
七、第三方配置(非官方字段)1. eslintConfigeslint的配置,更推荐新建 .eslintrc 进行配置
使用参考:新建 .eslintrc
2. babelbabel的配置,更推荐新建 .babelrc 进行配置
3. unpkgunpkg 是一个基于 CDN 的前端包托管服务,用于在浏览器中直接引用和加载 npm 上发布的包。
无需下载,直接通过 <script> 标签引用
lint-staged是一个在Git暂存文件上运行linters的工具,通常配合gitHooks一起使用。
使用参考:配置 husky、lint-staged、@commitlint/cli
5. browserslist告知支持哪些浏览器及版本,Autoprefixer常用到它
指示包是否具有副作用,协助Webpack,Rollup等进行tree shaking
多数情况下可以直接设置为false,这样打包工具就会自动删除未被import的代码
但是有些情况例外
- 有一些特定的模块文件,它们执行一些副作用操作,如注册全局事件监听器、修改全局状态等。
- 告诉构建工具不要将样式文件排除在无用代码消除的优化范围之外
原文链接:https://juejin.cn/post/7240805459288522808
上一篇:志高空调风向怎么调(详细指南)
- 维修知识
- 安装知识
- 清洗保养
- 行业新闻
- 常见问题
- Rinnai洗碗机售后服务热线02-26
- ACA洗碗机售后电话02-26
- 三洋洗衣机官网02-26
- 广州法罗力空气源热泵售后维修是多少02-26
- 中科万隆空调售后24小时人工客服02-26
- 华第锅炉售后服务热线02-26
- thermex锅炉售后24小时人工客服02-26
- 中赤锅炉全国统一服务热线02-26
- 弗莱尔燃气灶售后服务热线02-26
- 培恩集成灶售后维修02-26
- 佛山西屋空气源热泵售后服务号码是多少02-26
- IMMERGAS锅炉售后维修电话02-26
- 德国宝空气能售后维修02-26
- vincase酒柜售后服务热线02-26
- Fardior燃气灶维修电话02-26
- 万和空气能维修电话02-26
- 广州富信冰箱售后服务号码是多少02-26
- 威普集成灶售后服务号码02-26
- 太阳雨地暖售后24小时人工客服02-26
- 佛山凡帝都空气源热泵维修电话是多少02-26
- 广州雪洛森冰箱售后24小时人工客服是多少02-26
- 帝柏纳锅炉售后电话24小时人工电话02-26
- 富丽凯壁挂炉售后服务热线02-26
- Vanward锅炉售后服务电话号码是多少02-26
- 佛山CAUKD制冰机售后电话是多少02-26
- MDC制冰机售后维修02-26
- DAIKIN空调售后维修02-26
- 加格纳洗碗机维修电话02-26
- 广州德地氏空气源热泵售后维修是多少02-26
- Tesy空气源热泵售后服务号码02-26
- 奥斯塔壁挂炉售后维修02-26
- FADU锅炉售后服务电话24小时02-26
- 年代燃气灶售后服务热线02-26
- DONPER制冰机售后服务号码02-26
- 好普利佳风幕柜售后电话02-26
- YBTE锅炉售后维修02-26
- 万和热水器售后服务号码02-26
- 1LG的L筒洗衣机灯为什么全亮了(LG洗衣机灯全亮原因分析)
- 2冰墩墩多少钱一个(冰墩墩热销中-超值价格限时抢购!)
- 3XSAN燃气灶客服热线(XSAN燃气灶客服:热线贴心服务)
- 4美的3p空调现p8什么意思(美的3P空调现P8,意味着什么?)
- 5豆浆机为什么不能加热(豆浆机为什么不可加热?)
- 616脚芯片什么作用(16脚芯片:引领科技革新的重要组成部分)
- 7东芝182维修代码(东芝182维修代码全解答)
- 8格力空调出现fc是什么意思(格力空调出现FC是什么意思?简明解释!)
- 9海尔保鲜柜不制冷是什么原因(海尔保鲜柜不制冷原因解析)
- 10美的冰箱温度怎么调(美的冰箱:轻松调控温度,守护鲜美(25字))

