name 项目名称version 项目版本号dependencies 项目依赖包scripts npm命令homepage 设置应用的跟路径项目打包后是要运行在一个域名之下的,有时候可能是运行在跟域名下,也有可能运行在某个子域名下或或域名的某个目录下,这时候我们就需要让我们的应用知道去哪里加载资源,这时候就需要我们设置一个跟路径,而且有时候我们的资源会部署在 CDN 上,你必须告诉打包工具你的CDN地址是什么。比如我们用 create-react-app 开发的 React 应用,以及 Vue CLI 开发的项目,默认是继承了 webpack 的,当不配置 homepage 属性,build 打包之后的文件资源应用路径默认是 /
如下图
当你设置了
homepage属性后,比如我这里homepage设置为 github 的 pages 服务地址
包后的资源路径就会加上
homepage的地址。比如上面图片配置好homepage之后我打包一个 React 项目,打包后index.html页面的资源路径就是:
bugs 提供给使用者上报 **bugs**的途径, 可以填一个**email**或者一个**issue地址**
{
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
如果你只想提供一个issue地址, 那么bugs可以只是一个字符串
repository 放置你的git地址, 格式如下
"repository" :{
"type" : "git",
"url" : "https://github.com/npm/npm.git"
}
engines 声明你的包需要在怎样的node环境下运行 (npm也一样可以声明)
"engines" : {
"node" : ">=0.10.3 <0.12"
}
只有在用户配置 npm 的
engine-strict后, 才会有意义, 不然只会冒出一个warning(程序员看不到warning)
-
engineStrict 忽略, 最新的npm已经废弃这个了 -
description 描述,npm会对description做分词搜索 -
keywords 关键字,npm会对description做精准搜索 -
author 作者 -
private
如果你设置
"private": true,npm就不会发布它。这是一个防止意外发布私有库的方式。如果你要确定给定的包是只发布在特定registry(如内部registry)的,用publishConfighash的描述来重写registry的publish-time配置参数。
license
你应该要指定一个许可证,让人知道使用的权利和限制的。最简单的方法是,假如你用一个像BSD或者MIT这样通用的许可证,就只需要指定一个许可证的名字,像这样:
{ "license" : "BSD" }
如果你又更复杂的许可条件,或者想要提供给更多地细节,可以这样:
"licenses" : [
{ "type" : "MyLicense"
, "url" : "http://github.com/owner/project/path/to/license"
}
]
main
这个是一个重要属性,原文对这个描述比较绕, 实际上可以理解为 入口文件
"main":"./src/index.js",
以上面的例子来说, 如果你的包名是
foo, 当用户代码require('foo')时,相当于require了你包目录下的./src/index.js文件.如果没有提供这个字段, 默认是项目根目录下的index.js
-
types or typings 类型声明入口文件 -
unpkg 让npm上所有的文件都开启cdn服务
{
"unpkg": "dist/jquery.js"
}
正常情况下,访问
jquery的发布文件通过https://unpkg.com/jquery@3.3.1/dist/jquery.js,当你使用省略的 urlhttps://unpkg.com/jquery时,便会按照如下的方式获取文件:
# [latestVersion] 指最新版本号,pkg 指 package.json
# 定义了 unpkg 属性时
https://unpkg.com/jquery@[latestVersion]/[pkg.unpkg]
# 未定义 unpkg 属性时,将回退到 main 属性
https://unpkg.com/jquery@[latestVersion]/[pkg.main]
resolutions
{
"resolutions": {
"transitive-package-1": "0.0.29",
"transitive-package-2": "file:./local-forks/transitive-package-2",
"dependencies-package-1/transitive-package-3": "^2.1.1"
}
}
允许你覆盖特定嵌套依赖项的版本
files
这个不是必选项, 也并不常见, 但是很重要, 因为有配置这个信息会显得非常专业.files是一个数组, 它描述了你
npm publish的时候推送到npm服务器的文件列表,支持目录和通配 比如
"files": [
"LICENSE",
"History.md",
"Readme.md",
"index.js",
"lib/"
],
反过来, 你可以通过一个
.npmignore文件来排除一些文件, 防止大量的垃圾文件推送到npm, 规则上和你用的gitignore是一样的.
反过来, 你可以通过一个
.npmignore文件来排除一些文件, 防止大量的垃圾文件推送到npm, 规则上和你用的gitignore是一样的.
package.json 配置学习 - 知乎 (zhihu.com)
package.json里的一些属性讲解 - 知乎 (zhihu.com)
【小技巧】package.json中homepage属性的作用_前端全栈开发者-CSDN博客
package.json 字段说明 - 孟繁贵 - 博客园 (cnblogs.com)