参考: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 使用这个字段