参考:https://www.cnblogs.com/tzyy/p/5193811.html(比较详细)或 https://juejin.cn/post/7099041402771734559(有分类)或 https://mp.weixin.qq.com/s/RrHPyjQjGXqRWxz6LvslMw
{
// 名称
"name": "vue",
// 版本
"version": "2.6.10",
// 描述
"description": "Reactive, component-oriented view layer for modern web interfaces.",
// npm包项目的主要入口文件,必须的
"main": "dist/vue.runtime.common.js",
// rollup 打包需要的入口文件
"module": "dist/vue.runtime.esm.js",
// npm 上所有的文件都开启 cdn 服务地址
"unpkg": "dist/vue.js",
// jsdelivr cdn公共库
"jsdelivr": "dist/vue.js",
// TypeScript 的入口文件
"typings": "types/index.d.ts",
// 当你发布package时,具体那些文件会发布上去
"files": [
"src",
"dist/*.js",
"types/*.d.ts"
],
// 声明该模块是否包含 sideEffects(副作用),从而可以为 tree-shaking 提供更大的优化空间。
"sideEffects": false,
"scripts": {
"dev": "rollup -w -c scripts/config.js --environment
},
// 代码质量检查
"gitHooks": {
"pre-commit": "lint-staged",
"commit-msg": "node scripts/verify-commit-msg.js"
},
// 代码检查
"lint-staged": {
"*.js": [
"eslint --fix",
"git add"
]
},
// git仓库所在位置
"repository": {
"type": "git",
"url": "git+https://github.com/vuejs/vue.git"
},
// 关键词
"keywords": [
"vue"
],
// 作者
"author": "Evan You",
// 开源协议
"license": "MIT",
// bug地址
"bugs": {
"url": "https://github.com/vuejs/vue/issues"
},
// 主页
"homepage": "https://github.com/vuejs/vue#readme",
// 依赖
"devDependencies": {
"@babel/core": "^7.0.0",
"acorn": "^5.2.1",
"babel-eslint": "^10.0.1",
},
// 设置一些用于npm包的脚本命令会用到的配置参数
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
}
说明:
作为包的 package.json 文件 和 作为顶层项目目录下的 package.json 是有点区别。项目目录下 的 package 文件 ,字段不是 很严格的要求。
包 版本的 的问题:package.json中包的版本不一定是指定版本,可能是版本的也范围。https://blog.csdn.net/qq_29180565/article/details/106674104
npm 包 设定的版本规则:主版本号.次版本号.修补版本号
version :指定版本。比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
~version:大概匹配某个版本。比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
^version:兼容某个版本。比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。
latest :安装最新版本。
>version:必须大于某个版本。
>=version:可大于或等于某个版本。
X :x号的位置表示任意版本。如:1.2.x,表示可以1.2.0,1.2.1,…,1.2.n
一、必须属性
name
version
二、描述信息
description
keywords
author:author顾名思义就是作者,表示该项目包的作者。
contributors:contributors表示该项目包的贡献者,和author不同的是,该字段是一个数组,包含所有的贡献者
homepage:homepage就是项目的主页地址了,它是一个字符串。
repository:表示代码的存放仓库地址。
三、依赖配置
dependencies
devDependencies
peerDependencies
四、脚本配置
scripts
config:用来配置scripts运行时的配置参数,如下所示:
"config": {
"port": 3000
}
如果运行npm run start,则port字段会映射到npm_package_config_port环境变量中:
console.log(process.env.npm_package_config_port) // 3000
五、文件&目录
main:用来指定加载的入口文件,在 browser 和 Node 环境中都可以使用。如果我们将项目发布为npm包,那么当使用 require 导入npm包时,返回的就是main字段所列出的文件的module.exports 属性。如果不指定该字段,默认是项目根目录下的index.js。如果没找到,就会报错。【如果不是作为npn库的包,这个字段不需要写】
browser:定义 npm 包在 browser 环境下的入口文件。
module:定义 npm 包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用。如果 npm 包导出的是 ESM 规范的包,使用 module 来定义入口文件。
{ 说明下 }:main、browser、module 三个的入口入口文件相关的配置是有差别的,特别是在不同的使用场景下。在Web环境中,如果使用loader加载ESM(ES module),那么这三个配置的加载顺序是browser→module→main,如果使用require加载CommonJS模块,则加载的顺序为main→module→browser。
bin:用来指定各个内部命令对应的可执行文件的位置
files
man
六、发布配置
private
publishConfig
license
七、第三方配置
typings:指定TypeScript的入口文件TypeScript 的入口文件。【npm 包中 package.json 可能会有,项目下的 根据开发者自己定】
个人理解:typings 字段 就是方便 IDE 识别、编译、智能提示 js 语法的 工具。项目中 引入包,根据 main字段 引入文件的。
typings 的入口文件 里面的代码 只是 为 编辑器 智能提示 服务的【同时,开发人员 通过这个 文件,可以找到 某个方法具体有哪些 参数 以及 参数类型】。
真正执行的程序是不会执行 这里面的 代码的;所以 编辑器 跳转 是先根据 typings 字段进行跳转的,如果 没有这个字段 再跳转 main 字段的文件。
经验:webstorm中npm包的 类型声明 中 interface 定义的类型 类型变量,跳转时 可以跳转 到 ts 的源 文件的定义处。
eslintIgnore:eslint 使用这个字段