主题
package.josn
文件详解
随着
Nodejs
的出现与流行,前端由原来的html css js
刀耕火种到如今的各种工程化自动化横行,如今的项目里面都可以看到一个名为package.json
的文件
一、package.json
文件是干啥的?
每个用到nodejs
的项目的根目录下面,一般都有一个package.json
文件,这是该项目的核心。定义了这个项目所需要的各种模块、依赖包及版本、脚本命令、以及项目的配置信息 (比如名称/描述和版本/许可证等元数据) 还有运行、开发以及有选择地将项目发布到 npm 所需的信息。 npm install
命令根据这个配置文件,自动下载所需要的模块,也就是配置项目所需的运行和开发环境
二、package.json
的用途是什么?
- 1、项目的
package.json
是配置和描述如何与程序交互和运行的中心。 - 2、
npm CLI
(和yarn
) 用它来识别你的项目并了解如何处理项目的依赖关系。 - 3、
package.json
文件使npm
可以启动你的项目、运行脚本、安装依赖项、发布到NPM 注册表
以及许多其他有用的任务。 - 4、
npm CLI
也是管理package.json
的最佳方法,因为它有助于在项目的整个生命周期内生成和更新package.json
文件。
package.json
会在项目的生命周期中扮演多个角色,其中某些角色仅适用于发布到 NPM 的软件包。即使你没有把项目发布到 NPM 注册表中,或者没有将其公开发布给其他人,那么 package.json
对于开发流程仍然至关重要。
你的项目还必须包含 package.json
,然后才能从 NPM
安装软件包。这可能是你在项目中需要它的主要原因之一。
三、创建package.json
文件
创建
package.json
文件可以手动创建,也可以自动生成
package.json
文件必须是有效的 JSON
。这意味着任何缺少的逗号、丢失的引号或其他格式错误都将阻止 npm
与 package.json
进行交互。 如果确实引入了错误,则下次运行 npm 命令时将会看到错误提示。建议尽可能使用 npm CLI 更新和管理 package.json
,以避免意外将错误引 入package.json
中。
强烈推荐使用 npm init -y
命令创建你的 package.json
, 将有助于确保你生成有效的文件。
用 npm init
初始化的package.josn
文件如下:
json
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
或者
注意:
- 在开发中,为更好的管理
package.json
文件,最好使用 npm 的命令npm install
,npm uninstall
和npm update
来管理依赖项,这样可以使你的package.json
和node_modules/
文件夹保持同步。如果手动添加依赖项列表的话,需要你在把依赖项实际安装到项目之前运行npm install
。因为package.json
仅是我们记录依赖项的位置,而node_modules/
文件夹是安装依赖项代码的实际位置,所以手动更新package.json
的依赖项字段不会立即将我们的状态反映到node_modules/
文件夹。这就是为什么要用 npm 帮助管理依赖项的原因,因为它会同时更新package.json
和node_modules/
文件夹。
四、package.josn
中的常见字段
1. 基本字段概览
字段 | 描述 |
---|---|
name | 项目名字 |
version | 版本号 |
author | 作者 |
main | 定义 npm 包在客户端和 node 端的入口文件 |
browser | 定义 npm 包在客户端下的入口文件 |
module | 定义 npm 包在 node 端的入口文件 |
bin | 定义 npm 包在 node 端的入口文件 |
config | 用来添加命令行的环境变量 |
scripts | 指定了运行脚本命令的 npm 命令行缩写,比如 start 指定了运行 npm run start 时,所要执行的命令 |
dependencies | 指定了项目运行所依赖的模块 (生产环境) --save 或-P 安装的依赖 |
devDependencies | 指定了项目开发所需要的模块 (开发环境) --save-dev 或-D 安装的依赖 |
peerDependencies | 在开发 npm 包的时候,提示宿主环境去安装满足插件 A 中 peerDependencies 所指定依赖的包,然后在插件 import、require 所依赖的包的时候,永远都是引用宿主环境统一安装的 npm 包,最终解决插件与所依赖包不一致的问题,避免依赖重复安装 |
peerDependenciesMeta | 用户安装您的软件包时,如果 peerDependencies 尚未安装指定的软件包,npm 将发出警告。该 peerDependenciesMeta 字段用于向 npm 提供有关如何使用对等依赖项的更多信息 |
bundledDependencies | 这些软件包名称将在发布软件包时捆绑在一起 |
optionalDependencies | 如果找不到依赖项或安装失败,则希望 npm 继续,则可以将其放在 optionalDependencies 对象中 |
files(array) | 在发布包的时候,很重要,指明包中应该包含哪些文件,支持目录和通配 |
license | 软件许可证,规定和限制软件用户使用软件 (或其源代码) 的权利 |
repository | 代码仓库的地址 |
homepage(url) | 这个包的官网 (option) |
bugs(object) | 给用户提供上报缺陷的途径。可以是 email 或者直接给出链接(option) |
funding | 捐助信息,一般用不到(option) |
private | 这个设置为 true, 就会无法 npm publish。如果项目需要保密,则需要设置该字段为 true,如果需要发包,则不能设置为 true |
publishConfig | 定义一个包在发布到 npm 时的一些配置项 |
实际的字段比我们所介绍的要多,你可以在它的文档中了解其余字段,但以下的是必须要了解的
package.json
属性。
2. name
和 version
在开发 npm 包的时候一定要写,因为名字加版本号是包的唯一标识;
- name 表示包名;
- version 表示包的版本。
但是如果是项目的话,可以不写。 具体如下:
name
js
"name": "my-project"
name 字段定义包的名称。
- 发布到 NPM 注册表时,这是软件包将在其中显示的名称。
- 它不能超过 214 个字符,只能是小写字母,并且必须是 URL 安全的 (允许连字符和下划线,但 URL 中不允许使用空格或其他字符) 。
- 如果将软件包发布到 NPM,则 name 属性是必需的,并且必须是唯一的。
- 如果尝试用 NPM 注册表上当前已经使用的名称发布程序包,则会收到错误消息。
- 如果你的软件包并不是要发布到 NPM 上,则 name 不必是唯一的。
提示
- A、包名必须少于等于
214
字符 - B、包名不能以
.
或\_
开头 - C、包名不能含有大写字母 (历史原因, 有的老包还有大写字母,新的已经不能用大写字母)
- D、另外, 一些 URL 规范里不允许的字符也不能用(具体哪些字符就需要大家自己查查了)
- E、建议不要在包名里包含
js
node
等字眼, 因为 npm 默认就是js
或node
的 - F、因为包名最终会用在
require
语句里, 所以尽可能短一些,但要注意能明确表达自己的用途 - G、你开发一个包之前, 最好自己上
npm
官网看看名字是不是已经被占用了(很重要)
version
json
"version": "1.5.0",
version
是 package.json
描述的软件的当前版本
- version 字段对于任何已发布的软件包都非常重要,并且在发布之前是必填的。
- 对于未发布的程序包,此属性不是严格要求的。
- 通常在将新版本发布到 NPM 之前,根据 SemVer,版本号会增加。
提示
版本号注意事项:对于版本号, npm 使用业界标准的 {major}.{feature}.{patch}
模式
major
:做了重大改变feature
:增加新功能patch
:修复一些 bug
3. homepage
表示这个包的官网
json
"homepage":"https://github.com/lijiahong123/virtual-component-v2/tree/master#readme"
4. bugs(object)
给用户提供上报缺陷的途径。可以是 email 或者直接给出链接
json
"bugs": {
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
5. license
json
"license": "ISC"
license
字段使我们可以定义适用于 package.json
所描述代码的许可证。 这是非常重要但经常被忽略的属性
- 在将项目发布到 NPM 注册表时,
license
非常重要,因为许可证可能会限制某些开发人员或组织对软件的使用。
- 在将项目发布到 NPM 注册表时,
- 拥有清晰的许可证有助于明确定义该软件可以使用的术语。
license
字段的值通常是许可证的标识符代码——例如 MIT 或 ISC 之类的字符串,它们代表 MIT 许可证和 ISC 许可证。
- 如果你不想提供许可证,或者明确不想授予使用私有或未发布的软件包的权限,则可以将 UNLICENSED 作为许可证。
- 如果你不确定要使用哪个许可证, Choose a License 是对你有用的资源。
6. author 和 contributors
author
和 contributors
字段的功能类似。它们都是 people
字段,可以是"Name"
格式的字符串,也可以是具有 name,email,url
字段的对象。email
和 url
都是可选的。
json
"author": "张三",
"contributors": [{
"name": "李四",
"email": "example@example.com",
"url": "https://www.osiolabs.com/#team"
}],
或者
json
"author": {
"name" : "package xxx",
"email" : "00000@163.com",
"url" : "http://xxx.com/"
},
"contributors": [
{
"name" : "package xxx",
"email" : "123456@163.com",
"url" : "http://xxxxr.com/"
}, {
"name" : "package xxx",
"email" : "258475@163.com",
"url" : "http://cccc.com/"
}
]
author
只供一个人使用,contributors
则可以由多个人组成。
- 这些字段是列出公共项目的联系人以及与贡献者共享信用的有用方法。
7. description 和 keywords
这两个字段都是用来在 npm 官网上搜索的, 区别是一个是字符串, 一个是字符串数组。npm 会对 description 做分词搜索, 而对于 keywords 会做精准搜索
description
json
"description": "第一个node.js程序"
NPM 注册表将 description 字段用于发布的软件包,以在搜索结果中和 npmjs.com 网站上描述该软件包。
- 当用户搜索 NPM 注册表时,该字符串用于帮助了解软件包。
- 这应该是软件包的简短摘要。
- 即使你没有将其发布到 NPM 注册表中,它也可以用作项目的简单文档。
keywords
json
"keywords": ["server", "osiolabs", "express", "compression"]
keywords 字段是一个字符串数组,其作用与描述相似。
- NPM 注册表会为该字段建立索引,能够在有人搜索软件包时帮助找到它们。
- 数组中的每个值都是与你的程序包关联的一个关键字。
- 如果你不发布到 NPM 注册表,则这个字段用处不大,可以忽略它。
8. files
在发布包的时候,很重要,指明包中应该包含哪些文件,支持目录和通配, 值为数组
js
"files": [
"src",
"dist/*.js",
"types/*.d.ts"
]
发包时候,不包含在files
字段中的一些文件会自动忽略掉, 不会上传到npm
9. main
定义 npm 包在客户端和 node 端的入口文件
json
"main": "src/index.js",
main 字段是 package.json
的功能属性。它定义了项目的入口点,通常是用于启动项目的文件。
- 如果你的包 (例如其名称为 foo-lib) 是由用户安装的,则当用户执行
require('foo-lib')
时,这是require
返回的main
字段中所列出的文件的module.exports
属性。
- 如果你的包 (例如其名称为 foo-lib) 是由用户安装的,则当用户执行
- 它的值通常是项目根目录中的
index.js
文件,但也可以是你选择作为包的主入口的任何文件。
- 它的值通常是项目根目录中的
- 若没有 main 等其他入口文件字段,
require('foo-lib')
的时候,会自动找到根目录中的index.js
作为入口文件
- 若没有 main 等其他入口文件字段,
10. browser
定义 npm 包在客户端下的入口文件
json
// browser 可定义成和 main/module 字段一一对应的映射对象,也可以直接定义为字符串
"browser": {
"./lib/index.js": "./lib/index.browser.js", // browser+cjs
"./lib/index.mjs": "./lib/index.browser.mjs" // browser+mjs
},
// "browser": "./lib/index.browser.js" // browser
11. module
定义 npm 包在 node 端的入口文件
json
"module": "lib/index.mjs", // module
12. bin
定义了一系列可执行命令, 在全局安装的命令行包里尤其多见;
- 带有
bin
信息的包, 在局部安装后, 可执行文件会在./node_modules/.bin
下 - 如果是全局安装, 可执行文件会在
$PATH
里对应npm
那个目录下.
json
"bin": {
"pm2": "./bin/pm2",
"pm2-dev": "./bin/pm2-dev",
"pm2-docker": "./bin/pm2-docker",
}
13. man(manuel 手册)
指定一个(或多个)文件, 用于执行man {包名}
时, 用来指定当前模块的man文档
的位置
json
"man" :[ "./doc/calc.1" ]
14. directories
值是一个object
, 包含了lib
bin
man
doc
example
test
等属性,主要是用来告诉用户某些功能目录放在哪里
json
"directories": {
"bin": "./bin",
"doc": "./doc",
"lib": "./lib"
}
15. scripts
scripts
字段是 package.json
中的另一种元数据功能。指定了运行脚本命令的 npm 命令行缩写
- scripts 属性接受一个对象,它的值为可以通过 npm run 运行的脚本,其键为实际运行的命令。
- 这些通常是终端命令,我们把它们放入 scripts 字段,可以既可以记录它们又可以轻松地重用。
- scripts 是 npm CLI 用来运行项目任务的强大工具。他们可以完成开发过程中的大多数任务。
json
"scripts": {
"start": "nodemon index.js",
"dev": "node ./index.js",
"bench:ssr": "npm run build:ssr && node benchmarks/ssr/renderToString.js && node benchmarks/ssr/renderToStream.js",
"build": "node scripts/build.js",
"build:ssr": "npm run build -- web-runtime-cjs,web-server-renderer",
"build:weex": "npm run build -- weex"
}
16. repository
你可以通过提供 repository
字段来记录项目代码所在的资源库。
- 该字段是一个对象,用于定义源代码所在的 url 及其使用的版本控制系统的类型。
- 对于开源项目,可能是以
Git
作为版本控制系统的GitHub
或Bitbucket
。
- 对于开源项目,可能是以
- 需要注意的是
URL
字段的本意是指向可从中访问版本控制的位置,而不仅仅是指向已发布的代码库。
- 需要注意的是
json
"repository": {
"type": "git",
"url": "https://github.com/osiolabs/example.git"
}
或者
"repository":"https://github.com/osiolabs/example.git"
17. config
添加命令行的环境变量, 例如:
json
// 某个 package.json文件内容
{
"name": "foo",
"config": {
"port": "8080"
},
"scripts": {
"start": "node server.js"
}
}
在server.js
脚本就可以引用config
字段的中port
的值:npm_package_config_xxx
,如npm_package_config_port
假设server.js
内容如下
js
http.createServer(/*...*/).listen(process.env.npm_package_config_port); // 获取package.json 文件中config字段的中port的值
在用户执行npm run start
命令时,这个脚本就可以得到值
18. dependencies 和 devDependencies
dependencies
json
"dependencies": {
"express": "^4.16.4",
"compression": "~1.7.4"
}
这是 package.json
中最重要的字段之一,它列出了项目使用 (生产环境) 的所有依赖项 (项目所依赖的外部代码) 。
- 使用
npm CLI
安装软件包时,它将下载到你的node_modules/
文件夹中,并将一个条目添加到你的依赖项属性中,注意软件包的名称和已安装的版本。
- 使用
dependencies
字段是一个对象,其中的包名做为键,而版本或版本范围为值。
- 从这个列表中,当在目录中运行 npm install 时,npm 知道要获取和安装哪些包 (以及什么版本) 。
package.json
的dependencies
字段位于项目的核心,并定义项目所需的外部包。
- 在依赖版本中看到的插入符号 (^) 和波浪号 (~) 是 SemVer 中定义的版本范围的表示法。
^
他将会把当前库的版本更新到当前主版本 (也就是第一位数字) 中最新的版本。- 例如:
"axios": "^0.18.0"
, 这个库会去匹配0.x.x
中最新的版本,但是他不会自动更新到1.0.0
。
- 例如:
~
他会更新到当前次版本号 (也就是中间的那位数字) 中最新的版本。- 例如:
"cross-env": "~5.2.0"
,这个库会去匹配更新到5.2.x
的最新版本,如果出了一个新的版本为 5.3.0,则不会自动升级
- 例如:
- 波浪符号是曾经 npm 安装时候的默认符号,现在已经变为了插入符号。
devDependencies
json
"devDependencies": {
"nodemon": "^1.18.11"
}
与 dependencies
字段类似,但是这里列出的包仅在开发期间需要,而在生产中不需要。
例如
在开发过程中使用工具重新加载项目,比如 nodemon,一旦程序部署并投入生产,将不会再使用它。
- devDependencies 属性使我们可以明确地指出生产中不需要哪些依赖项。
- 在生产环境中安装应用程序时,可以用
npm install --production
仅安装package.json
的dependency
字段中列出的内容。
- 在生产环境中安装应用程序时,可以用
- devDependency 是记录开发过程中程序需要哪些工具的好方法。
- 要将 npm 的软件包作为 devDependency 安装,可以运行
npm install --save-dev
。
- 要将 npm 的软件包作为 devDependency 安装,可以运行
- devDependencies 属性的另一种用途是在我们的 npm 脚本中使用它们。
19. engines
指明了该模块运行的平台,比如 Node 的某个版本或者浏览器
json
{
"engines": {
"node": ">=0.10.3 <0.12"
}
}
20. os
指定操作系统
json
{
"os": ["darwin", "linux", "!win32"]
}
21. cpu
指定 cpu
json
{
"cpu": ["x64", "ia32", "!arm", "!mips"]
}
五、npm 脚本以及依赖的安装
NPM 的全称是
Node Package Manager
,是随同 NodeJS 一起安装的包管理和分发工具,它很方便让 JavaScript 开发者下载、安装、上传以及管理已经安装的包。
安装了 node 之后,npm 也就随之安装了,也就是说,有点“买 node 送 npm”的味道
1、安装依赖
shell
$ npm install <包名>
# 或者
$ npm i <包名>
注意: 默认会安装最新版本的依赖包,若是要安装某一版本的依赖包,可以使用以下命令
shell
$ npm install @<包名>
或者
$ npm i @<包名>
参数 | 描述 | 示例 | 结果 |
---|---|---|---|
S, --save | 装包信息将加入到 dependencies (生产阶段的依赖) | npm install gulp --save 或 npm install gulp -S | "dependencies": { "gulp": "^3.9.1"} |
-D, --save-dev | 安装包信息将加入到devDependencies (开发阶段的依赖) ,所以开发阶段一般使用它 | npm install gulp --save-dev 或 npm install gulp -D | "devDependencies": { "gulp": "^3.9.1"} |
-O, --save-optional | 安装包信息将加入到optionalDependencies (可选阶段的依赖) | npm install gulp --save-optional 或 npm install gulp -O | "optionalDependencies": { "gulp": "^3.9.1"}, |
-E, --save-exact | 精确安装指定模块版本 | npm install gulp --save-exact 或 npm install gulp -E | "dependencies": { "gulp": "3.9.1"} |
-g,--global | 全局安装 (global) | npm install gulp -g 或 npm i gulp --global | 全局可用,无需本地安装了 |
模块的依赖都被写入了package.json
文件后,他人打开项目的根目录 (项目开源、内部团队合作) ,使用 npm install 命令可以根据 dependencies 配置安装所有的依赖包
2、卸载依赖
基础语法:
shell
npm uninstall <依赖名称>
参数说明:
- 卸载开发版本的模块:
npm uninstall gulp --save-dev
- 卸载开发版本的模块:
3、更新依赖
基础语法:
shell
npm update [-g] [<pkg>...]
4、检查模块是否已经过时
基础语法:
shell
npm outdated [[<@scope>/]<pkg> ...]
此命令会列出所有已经过时的包,可以及时进行包的更新
5、查看 npm 包安装的版本
- 若要查看所有已安装的 npm 软件包 (包括它们的依赖包) 的最新版本,则:
shell
npm list
例如
shell
❯ npm list
/Users/joe/dev/node/cowsay
└─┬ cowsay@1.3.1
├── get-stdin@5.0.1
├─┬ optimist@0.6.1
│ ├── minimist@0.0.10
│ └── wordwrap@0.0.3
├─┬ string-width@2.1.1
│ ├── is-fullwidth-code-point@2.0.0
│ └─┬ strip-ansi@4.0.0
│ └── ansi-regex@3.0.0
└── strip-eof@1.0.0
npm list -g
也一样,但适用于全局安装的软件包
- 如果要查看软件包在 npm 仓库上最新的可用版本,则运行
npm view [package_name] version
shell
❯ npm view cowsay version
1.3.1
6、npm scripts 脚本
5.1、npm scripts 脚本介绍
该命令写在 package.json 文件 scripts 字段中,可以自定义命令来配置一个服务器环境和安装一系列的必要程序,例如:
json
{
"scripts": {
"start": "node ./index.js"
}
}
以上脚本,只需要运行命令npm start
或者npm run start
,就相当于执行对应的 node ./index.js
这些定义在 package.json 里面的脚本,就称为 npm 脚本。它的优点很多:
- 1、项目的相关脚本,可以集中在一个地方。
- 2、不同项目的脚本命令,只要功能相同,就可以有同样的对外接口。用户不需要知道怎么测试你的项目,只要运行 npm run test 即可。
- 3、可以利用 npm 提供的很多辅助功能。
查看当前项目的所有 npm 脚本命令,可以使用不带任何参数的 npm run
命令
5.2、npm scripts 脚本原理
npm 脚本的原理非常简单。每当执行npm run
,就会自动新建一个 Shell,在这个 Shell 里面执行指定的脚本命令。因此,只要是 Shell (一般是 shell) 可以运行的命令,就可以写在 npm 脚本里面。
比较特别的是,npm run 新建的这个 Shell,会将当前目录的 node_modules/.bin 子目录加入 PATH 变量,执行结束后,再将 PATH 变量恢复原样。
这意味着,当前目录的 node_modules/.bin
子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。比如,当前项目的依赖里面有 Mocha,只要直接写 mocha test 就可以了。
json
"test": "mocha test"
而不用写成下面这样:
json
"test": "./node_modules/.bin/mocha test"
由于 npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面。
npm 脚本的退出码,也遵守 Shell 脚本规则。如果退出码不是 0,npm 就认为这个脚本执行失败。
5.3、脚本通配符
由于 npm 脚本就是 Shell 脚本,因为可以使用 Shell 通配符。
json
"lint": "jshint *.js"
"lint": "jshint **/*.js"
解释:
*
表示任意文件名,**
表示任意一层子目录。
如果要将通配符传入原始命令,防止被 Shell 转义,要将星号转义。
json
"test": "tap test/\*.js"
5.4、npm 脚本传参
向 npm 脚本传入参数,要使用 --
标明。
例如:
- 向
npm run lint
命令传入参数,必须写成下面这样。
shell
$ npm run lint -- --reporter checkstyle > checkstyle.xml
## 上面的 reporter checkstyle > checkstyle.xml 就是参数
也可以在 package.json 里面再封装一个命令,如下:
shell
"lint": "jshint **.js",
"lint:checkstyle": "npm run lint -- --reporter checkstyle > checkstyle.xml"
5.5、npm 命令简写
四个常用的 npm 脚本有简写形式
npm start
是npm run start
npm stop
是npm run stop
的简写npm test
是npm run test
的简写npm restart
是npm run stop && npm run restart && npm run start
的简写
5.6、npm 脚本执行顺序
如果 npm 脚本里面需要执行多个任务,那么需要明确它们的执行顺序。
5.6.1 同时的平行执行:&
如果是并行执行 (即同时的平行执行) ,可以使用&
符号,例如:
shell
$ npm run script1.js & npm run script2.js
## 同时执行script1和script2
5.6.2 依次执行:&&
如果是继发执行 (即只有前一个任务成功,才执行下一个任务) ,可以使用&&
符号。例如:
shell
npm run script1.js && npm run script2.js
注意:
&
和&&
这两个符号是 shell 的功能。此外,还可以使用 node 的任务管理模块:script-runner、npm-run-all、redrun。
5.7、常用脚本示例
shell
# 删除目录
"clean": "rimraf dist/*",
# 本地搭建一个 HTTP 服务
"serve": "http-server -p 9090 dist/",
# 打开浏览器
"open:dev": "opener http://localhost:9090",
# 实时刷新
"livereload": "live-reload --port 9091 dist/",
# 构建 HTML 文件
"build:html": "jade index.jade > dist/index.html",
# 只要 CSS 文件有变动,就重新执行构建
"watch:css": "watch 'npm run build:css' assets/styles/",
# 只要 HTML 文件有变动,就重新执行构建
"watch:html": "watch 'npm run build:html' assets/html",
# 部署到 Amazon S3
"deploy:prod": "s3-cli sync ./dist/ s3://example-com/prod-site/",
# 构建 favicon
"build:favicon": "node scripts/favicon.js",
参考阮一峰的博客:http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
六、package.json 完整示例
json
{
"name": "Hello World",
"version": "0.0.1",
"author": "张三",
"private": true, // 如果设置为true,npm拒绝发布这个包;
"description": "第一个node.js程序",
"keywords": ["node.js", "javascript"],
"repository": {
// 项目代码存放地方
"type": "git",
"url": "https://path/to/url"
},
"man": "./sss", //指定一个单一的文件名或一个文件名数组。意思类似于linux命令中的man 命令,来查看一个命令的用法
"license": "MIT",
"engines": {
"node": "0.10.x"
}, // 指明了该模块运行的平台 node哪个版本,或某个浏览器
"bugs": {
"url": "http://path/to/bug",
"email": "bug@example.com"
},
"contributors": [
{
"name": "李四",
"email": "lisi@example.com"
}
],
"config": {
"port": "8080" //添加命令行的环境变量
},
"main": "./index.js", // 指定require命令加载的入口文件;
"bin": {
"someTool": "./bin/someTool.js" // 将 ./bin/someTool.js利用软链接挂载到someTool上,可在scripts里使用诸如 "someTool":"someTool"来执行 ./bin/someTool.js
},
"scripts": {
"prepublish": "", // 在包发布之前运行,也会在npm install安装到本地时运行
"publish": "", // 包被发布之后运行,
"preinstall": "", // 包被安装前运行,
"install": "", // 包被安装后运行,
"preuninstall": "", // 包被卸载前运行,
"postuninstall": "", // 包被卸载后运行,
"text": "", // npm test命令时允许
"start": "node index.js" // 允许通过npm start 允许 node index.js
},
"dependencies": {
// 项目运行所依赖的模块
"express": "latest", // 安装最新版本
"mongoose": "~3.8.3", // 安装3.8.3以上的版本,安装时不改变大版本号和次要版本号;
"handlebars-runtime": "^1.0.12" // 安装 安装时不改变大版本号,可改变次要版本号和小版本号
},
"devDependencies": {
// 项目开发所依赖的模块
"bower": "~1.2.8"
},
"preferGlobal": true, // 当用户不将该模块安装为全局模块时 (即不用–global参数) ,要不要显示警告
"style": [
"./node_modules/tipso/src/tipso.css" // 供浏览器使用时,样式文件所在的位置
]
}
七、参考链接
nodejs 中文网:http://nodejs.cn/learn/the-package-json-guide (强烈推荐) https://www.cnblogs.com/Qooo/p/13809948.htmlhttps://www.cnblogs.com/zhaowinter/p/10905732.html《npm scripts 使用指南》阮一峰