<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=Node.js%EF%BC%9ANPM</id>
	<title>Node.js：NPM - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=Node.js%EF%BC%9ANPM"/>
	<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9ANPM&amp;action=history"/>
	<updated>2026-05-15T15:01:18Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9ANPM&amp;diff=6452&amp;oldid=prev</id>
		<title>2023年3月31日 (五) 13:20 Eijux</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9ANPM&amp;diff=6452&amp;oldid=prev"/>
		<updated>2023-03-31T13:20:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年3月31日 (五) 21:20的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;第1行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第1行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:Node.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;js&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:Node.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;js教程&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9ANPM&amp;diff=4074&amp;oldid=prev</id>
		<title>Eijux：​建立内容为“category:Node.js  == 关于 == NPM 是随同 NodeJS 一起安装的'''包管理工具'''，能解决 NodeJS 代码部署上的很多问题，常见的使用…”的新页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9ANPM&amp;diff=4074&amp;oldid=prev"/>
		<updated>2021-05-29T17:57:40Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“&lt;a href=&quot;/%E5%88%86%E7%B1%BB:Node.js&quot; title=&quot;分类:Node.js&quot;&gt;category:Node.js&lt;/a&gt;  == 关于 == NPM 是随同 NodeJS 一起安装的&amp;#039;&amp;#039;&amp;#039;包管理工具&amp;#039;&amp;#039;&amp;#039;，能解决 NodeJS 代码部署上的很多问题，常见的使用…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:Node.js]]&lt;br /&gt;
&lt;br /&gt;
== 关于 ==&lt;br /&gt;
NPM 是随同 NodeJS 一起安装的'''包管理工具'''，能解决 NodeJS 代码部署上的很多问题，常见的使用场景有以下几种：&lt;br /&gt;
* 允许用户从 NPM 服务器下载别人编写的第三方包到本地使用。&lt;br /&gt;
* 允许用户从 NPM 服务器下载并安装别人编写的命令行程序到本地使用。&lt;br /&gt;
* 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。&lt;br /&gt;
&lt;br /&gt;
=== 安装 ===&lt;br /&gt;
由于新版的 nodejs 已经集成了 npm，所以安装 nodejs 时 npm 也一并安装好了。&lt;br /&gt;
&lt;br /&gt;
可以通过输入 '''npm -v''' 来测试是否成功安装。命令如下，出现版本提示表示安装成功:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm -v&lt;br /&gt;
2.3.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 升级 ===&lt;br /&gt;
如果你安装的是旧版本的 npm，可以很容易得通过 npm 命令来升级，命令如下：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo npm install npm -g&lt;br /&gt;
/usr/local/bin/npm -&amp;gt; /usr/local/lib/node_modules/npm/bin/npm-cli.js&lt;br /&gt;
npm@2.14.2 /usr/local/lib/node_modules/npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 如果是 Window 系统使用以下命令即可：&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm -g&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 使用淘宝镜像的命令：&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g cnpm --registry=https://registry.npm.taobao.org&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 使用 npm ==&lt;br /&gt;
&lt;br /&gt;
=== 安装模块 ===&lt;br /&gt;
npm 安装 Node.js 模块语法格式如下：&lt;br /&gt;
'''&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm install &amp;lt;Module Name&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''示例：'''&lt;br /&gt;
: 使用 npm 命令安装常用的 Node.js web框架模块 express：&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm install express&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: 安装好之后，express 包就放在了工程目录下的 '''node_modules''' 目录中，因此在代码中只需要通过 '''require('express')''' 的方式就好，无需指定第三方包路径：&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var express = require('express');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
npm 的包安装分为'''本地安装'''（local）、'''全局安装'''（global）两种，其命令行的差别只在于 '''-g''' 命令选项，比如：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
npm install express          # 本地安装&lt;br /&gt;
npm install express -g   # 全局安装&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 如果出现以下错误：【？？？】&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
npm err! Error: connect ECONNREFUSED 127.0.0.1:8087 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*: 解决办法为：&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm config set proxy null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 本地安装 ====&lt;br /&gt;
# 将安装包放在 '''./node_modules''' 下（运行 npm 命令时所在的目录）；&lt;br /&gt;
#* 如果没有 node_modules 目录，会在当前执行 npm 命令的目录下生成 node_modules 目录。&lt;br /&gt;
# 可以通过 '''require()''' 来引入本地安装的包。&lt;br /&gt;
&lt;br /&gt;
==== 全局安装 ====&lt;br /&gt;
# 将安装包放在 '''/usr/local''' 下或者你 '''node 的安装目录'''。&lt;br /&gt;
# 可以直接在'''命令行'''里使用。&lt;br /&gt;
&lt;br /&gt;
==== 本地 &amp;amp; 全局安装 ====&lt;br /&gt;
如果你希望具备两者功能，则需要在两个地方安装它或使用 '''npm link'''。【？？？】&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''示例：'''&lt;br /&gt;
: 使用全局方式安装 express：&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm install express -g&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* '''安装过程输出如下内容，第一行输出了模块的版本号及安装位置'''：&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
express@4.13.3 node_modules/express&lt;br /&gt;
├── escape-html@1.0.2&lt;br /&gt;
├── range-parser@1.0.2&lt;br /&gt;
├── merge-descriptors@1.0.0&lt;br /&gt;
├── array-flatten@1.1.1&lt;br /&gt;
├── cookie@0.1.3&lt;br /&gt;
├── utils-merge@1.0.0&lt;br /&gt;
├── parseurl@1.3.0&lt;br /&gt;
├── cookie-signature@1.0.6&lt;br /&gt;
├── methods@1.1.1&lt;br /&gt;
├── fresh@0.3.0&lt;br /&gt;
├── vary@1.0.1&lt;br /&gt;
├── path-to-regexp@0.1.7&lt;br /&gt;
├── content-type@1.0.1&lt;br /&gt;
├── etag@1.7.0&lt;br /&gt;
├── serve-static@1.10.0&lt;br /&gt;
├── content-disposition@0.5.0&lt;br /&gt;
├── depd@1.0.1&lt;br /&gt;
├── qs@4.0.0&lt;br /&gt;
├── finalhandler@0.4.0 (unpipe@1.0.0)&lt;br /&gt;
├── on-finished@2.3.0 (ee-first@1.1.1)&lt;br /&gt;
├── proxy-addr@1.0.8 (forwarded@0.1.0, ipaddr.js@1.0.1)&lt;br /&gt;
├── debug@2.2.0 (ms@0.7.1)&lt;br /&gt;
├── type-is@1.6.8 (media-typer@0.3.0, mime-types@2.1.6)&lt;br /&gt;
├── accepts@1.2.12 (negotiator@0.5.3, mime-types@2.1.6)&lt;br /&gt;
└── send@0.13.0 (destroy@1.0.3, statuses@1.2.1, ms@0.7.1, mime@1.3.4, http-errors@1.3.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 查看安装信息 ===&lt;br /&gt;
* 可以使用以下命令来查看所有全局安装的模块：&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm list -g&lt;br /&gt;
&lt;br /&gt;
├─┬ cnpm@4.3.2&lt;br /&gt;
│ ├── auto-correct@1.0.0&lt;br /&gt;
│ ├── bagpipe@0.3.5&lt;br /&gt;
│ ├── colors@1.1.2&lt;br /&gt;
│ ├─┬ commander@2.9.0&lt;br /&gt;
│ │ └── graceful-readlink@1.0.1&lt;br /&gt;
│ ├─┬ cross-spawn@0.2.9&lt;br /&gt;
│ │ └── lru-cache@2.7.3&lt;br /&gt;
……&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 如果要查看某个模块的版本号，可以使用命令如下：&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm list grunt&lt;br /&gt;
&lt;br /&gt;
projectName@projectVersion /path/to/project/folder&lt;br /&gt;
└── grunt@0.4.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 卸载模块 ===&lt;br /&gt;
可以使用以下命令来卸载 Node.js 模块。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm uninstall express&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
验证卸载，两种方式：&lt;br /&gt;
# 可以到 /node_modules/ 目录下查看包是否还存在&lt;br /&gt;
# 使用以下命令查看：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 更新模块 ===&lt;br /&gt;
可以使用以下命令更新模块：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm update express&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 搜索模块 ===&lt;br /&gt;
使用以下来搜索模块：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm search express&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 创建模块 ===&lt;br /&gt;
创建模块，'''package.json''' 文件是必不可少的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
步骤：&lt;br /&gt;
# 使用 '''npm init''' 命令来生成 package.json 文件（生成的文件包含了基本的结果）：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm init&lt;br /&gt;
This utility will walk you through creating a package.json file.&lt;br /&gt;
It only covers the most common items, and tries to guess sensible defaults.&lt;br /&gt;
&lt;br /&gt;
See `npm help json` for definitive documentation on these fields&lt;br /&gt;
and exactly what they do.&lt;br /&gt;
&lt;br /&gt;
Use `npm install &amp;lt;pkg&amp;gt; --save` afterwards to install a package and&lt;br /&gt;
save it as a dependency in the package.json file.&lt;br /&gt;
&lt;br /&gt;
Press ^C at any time to quit.&lt;br /&gt;
name: (node_modules) runoob                   # 模块名&lt;br /&gt;
version: (1.0.0) &lt;br /&gt;
description: Node.js 测试模块(www.runoob.com)  # 描述&lt;br /&gt;
entry point: (index.js) &lt;br /&gt;
test command: make test&lt;br /&gt;
git repository: https://github.com/runoob/runoob.git  # Github 地址&lt;br /&gt;
keywords: &lt;br /&gt;
author: &lt;br /&gt;
license: (ISC) &lt;br /&gt;
About to write to ……/node_modules/package.json:      # 生成地址&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;runoob&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Node.js 测试模块(www.runoob.com)&amp;quot;,&lt;br /&gt;
  ……&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Is this ok? (yes) yes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* 以上的信息，你需要根据你自己的情况输入。在最后输入 &amp;quot;yes&amp;quot; 后会生成 package.json 文件。&lt;br /&gt;
# 使用 '''npm adduser''' 命令在 npm 资源库中注册用户（使用邮箱注册）：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm adduser&lt;br /&gt;
Username: mcmohd&lt;br /&gt;
Password:&lt;br /&gt;
Email: (this IS public) mcmohd@gmail.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# 使用 '''npm publish''' 命令发布模块：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm publish&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
步骤都操作完成，就可以跟其他模块一样使用 npm 来安装该模块。&lt;br /&gt;
&lt;br /&gt;
== package.json ==&lt;br /&gt;
package.json 位于模块的目录下，用于'''定义包的属性'''。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''示例：'''&lt;br /&gt;
: 查看下 express 包的 package.json 文件，位于 node_modules/express/package.json 内容：&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;express&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Fast, unopinionated, minimalist web framework&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;4.13.3&amp;quot;,&lt;br /&gt;
  &amp;quot;author&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;TJ Holowaychuk&amp;quot;,&lt;br /&gt;
    &amp;quot;email&amp;quot;: &amp;quot;tj@vision-media.ca&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;contributors&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Aaron Heckmann&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;aaron.heckmann+github@gmail.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Ciaran Jessup&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;ciaranj@gmail.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Douglas Christopher Wilson&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;doug@somethingdoug.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Guillermo Rauch&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;rauchg@gmail.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Jonathan Ong&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;me@jongleberry.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Roman Shtylman&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;shtylman+expressjs@gmail.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Young Jae Sim&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;hanul@hanul.me&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;license&amp;quot;: &amp;quot;MIT&amp;quot;,&lt;br /&gt;
  &amp;quot;repository&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;git&amp;quot;,&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;git+https://github.com/strongloop/express.git&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;http://expressjs.com/&amp;quot;,&lt;br /&gt;
  &amp;quot;keywords&amp;quot;: [&lt;br /&gt;
    &amp;quot;express&amp;quot;,&lt;br /&gt;
    &amp;quot;framework&amp;quot;,&lt;br /&gt;
    &amp;quot;sinatra&amp;quot;,&lt;br /&gt;
    &amp;quot;web&amp;quot;,&lt;br /&gt;
    &amp;quot;rest&amp;quot;,&lt;br /&gt;
    &amp;quot;restful&amp;quot;,&lt;br /&gt;
    &amp;quot;router&amp;quot;,&lt;br /&gt;
    &amp;quot;app&amp;quot;,&lt;br /&gt;
    &amp;quot;api&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;dependencies&amp;quot;: {&lt;br /&gt;
    &amp;quot;accepts&amp;quot;: &amp;quot;~1.2.12&amp;quot;,&lt;br /&gt;
    &amp;quot;array-flatten&amp;quot;: &amp;quot;1.1.1&amp;quot;,&lt;br /&gt;
    &amp;quot;content-disposition&amp;quot;: &amp;quot;0.5.0&amp;quot;,&lt;br /&gt;
    &amp;quot;content-type&amp;quot;: &amp;quot;~1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;cookie&amp;quot;: &amp;quot;0.1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;cookie-signature&amp;quot;: &amp;quot;1.0.6&amp;quot;,&lt;br /&gt;
    &amp;quot;debug&amp;quot;: &amp;quot;~2.2.0&amp;quot;,&lt;br /&gt;
    &amp;quot;depd&amp;quot;: &amp;quot;~1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;escape-html&amp;quot;: &amp;quot;1.0.2&amp;quot;,&lt;br /&gt;
    &amp;quot;etag&amp;quot;: &amp;quot;~1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;finalhandler&amp;quot;: &amp;quot;0.4.0&amp;quot;,&lt;br /&gt;
    &amp;quot;fresh&amp;quot;: &amp;quot;0.3.0&amp;quot;,&lt;br /&gt;
    &amp;quot;merge-descriptors&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;methods&amp;quot;: &amp;quot;~1.1.1&amp;quot;,&lt;br /&gt;
    &amp;quot;on-finished&amp;quot;: &amp;quot;~2.3.0&amp;quot;,&lt;br /&gt;
    &amp;quot;parseurl&amp;quot;: &amp;quot;~1.3.0&amp;quot;,&lt;br /&gt;
    &amp;quot;path-to-regexp&amp;quot;: &amp;quot;0.1.7&amp;quot;,&lt;br /&gt;
    &amp;quot;proxy-addr&amp;quot;: &amp;quot;~1.0.8&amp;quot;,&lt;br /&gt;
    &amp;quot;qs&amp;quot;: &amp;quot;4.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;range-parser&amp;quot;: &amp;quot;~1.0.2&amp;quot;,&lt;br /&gt;
    &amp;quot;send&amp;quot;: &amp;quot;0.13.0&amp;quot;,&lt;br /&gt;
    &amp;quot;serve-static&amp;quot;: &amp;quot;~1.10.0&amp;quot;,&lt;br /&gt;
    &amp;quot;type-is&amp;quot;: &amp;quot;~1.6.6&amp;quot;,&lt;br /&gt;
    &amp;quot;utils-merge&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;vary&amp;quot;: &amp;quot;~1.0.1&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;devDependencies&amp;quot;: {&lt;br /&gt;
    &amp;quot;after&amp;quot;: &amp;quot;0.8.1&amp;quot;,&lt;br /&gt;
    &amp;quot;ejs&amp;quot;: &amp;quot;2.3.3&amp;quot;,&lt;br /&gt;
    &amp;quot;istanbul&amp;quot;: &amp;quot;0.3.17&amp;quot;,&lt;br /&gt;
    &amp;quot;marked&amp;quot;: &amp;quot;0.3.5&amp;quot;,&lt;br /&gt;
    &amp;quot;mocha&amp;quot;: &amp;quot;2.2.5&amp;quot;,&lt;br /&gt;
    &amp;quot;should&amp;quot;: &amp;quot;7.0.2&amp;quot;,&lt;br /&gt;
    &amp;quot;supertest&amp;quot;: &amp;quot;1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;body-parser&amp;quot;: &amp;quot;~1.13.3&amp;quot;,&lt;br /&gt;
    &amp;quot;connect-redis&amp;quot;: &amp;quot;~2.4.1&amp;quot;,&lt;br /&gt;
    &amp;quot;cookie-parser&amp;quot;: &amp;quot;~1.3.5&amp;quot;,&lt;br /&gt;
    &amp;quot;cookie-session&amp;quot;: &amp;quot;~1.2.0&amp;quot;,&lt;br /&gt;
    &amp;quot;express-session&amp;quot;: &amp;quot;~1.11.3&amp;quot;,&lt;br /&gt;
    &amp;quot;jade&amp;quot;: &amp;quot;~1.11.0&amp;quot;,&lt;br /&gt;
    &amp;quot;method-override&amp;quot;: &amp;quot;~2.3.5&amp;quot;,&lt;br /&gt;
    &amp;quot;morgan&amp;quot;: &amp;quot;~1.6.1&amp;quot;,&lt;br /&gt;
    &amp;quot;multiparty&amp;quot;: &amp;quot;~4.1.2&amp;quot;,&lt;br /&gt;
    &amp;quot;vhost&amp;quot;: &amp;quot;~3.0.1&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;engines&amp;quot;: {&lt;br /&gt;
    &amp;quot;node&amp;quot;: &amp;quot;&amp;gt;= 0.10.0&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;files&amp;quot;: [&lt;br /&gt;
    &amp;quot;LICENSE&amp;quot;,&lt;br /&gt;
    &amp;quot;History.md&amp;quot;,&lt;br /&gt;
    &amp;quot;Readme.md&amp;quot;,&lt;br /&gt;
    &amp;quot;index.js&amp;quot;,&lt;br /&gt;
    &amp;quot;lib/&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;scripts&amp;quot;: {&lt;br /&gt;
    &amp;quot;test&amp;quot;: &amp;quot;mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/&amp;quot;,&lt;br /&gt;
    &amp;quot;test-ci&amp;quot;: &amp;quot;istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/&amp;quot;,&lt;br /&gt;
    &amp;quot;test-cov&amp;quot;: &amp;quot;istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/&amp;quot;,&lt;br /&gt;
    &amp;quot;test-tap&amp;quot;: &amp;quot;mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;gitHead&amp;quot;: &amp;quot;ef7ad681b245fba023843ce94f6bcb8e275bbb8e&amp;quot;,&lt;br /&gt;
  &amp;quot;bugs&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;https://github.com/strongloop/express/issues&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;_id&amp;quot;: &amp;quot;express@4.13.3&amp;quot;,&lt;br /&gt;
  &amp;quot;_shasum&amp;quot;: &amp;quot;ddb2f1fb4502bf33598d2b032b037960ca6c80a3&amp;quot;,&lt;br /&gt;
  &amp;quot;_from&amp;quot;: &amp;quot;express@*&amp;quot;,&lt;br /&gt;
  &amp;quot;_npmVersion&amp;quot;: &amp;quot;1.4.28&amp;quot;,&lt;br /&gt;
  &amp;quot;_npmUser&amp;quot;: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;dougwilson&amp;quot;,&lt;br /&gt;
    &amp;quot;email&amp;quot;: &amp;quot;doug@somethingdoug.com&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;maintainers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tjholowaychuk&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;tj@vision-media.ca&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;jongleberry&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;jonathanrichardong@gmail.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;dougwilson&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;doug@somethingdoug.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;rfeng&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;enjoyjava@gmail.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;aredridel&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;aredridel@dinhe.net&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;strongloop&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;callback@strongloop.com&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;defunctzombie&amp;quot;,&lt;br /&gt;
      &amp;quot;email&amp;quot;: &amp;quot;shtylman@gmail.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;dist&amp;quot;: {&lt;br /&gt;
    &amp;quot;shasum&amp;quot;: &amp;quot;ddb2f1fb4502bf33598d2b032b037960ca6c80a3&amp;quot;,&lt;br /&gt;
    &amp;quot;tarball&amp;quot;: &amp;quot;http://registry.npmjs.org/express/-/express-4.13.3.tgz&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;directories&amp;quot;: {},&lt;br /&gt;
  &amp;quot;_resolved&amp;quot;: &amp;quot;https://registry.npmjs.org/express/-/express-4.13.3.tgz&amp;quot;,&lt;br /&gt;
  &amp;quot;readme&amp;quot;: &amp;quot;ERROR: No README data found!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
说明：&lt;br /&gt;
* '''name'''：包名。&lt;br /&gt;
* '''version'''：包的版本号。&lt;br /&gt;
* '''description'''：包的描述。&lt;br /&gt;
* '''homepage'''：包的官网 url 。&lt;br /&gt;
* '''author'''：包的作者姓名。&lt;br /&gt;
* '''contributors'''：包的其他贡献者姓名。&lt;br /&gt;
* '''dependencies'''：依赖包列表。如果依赖包没有安装，npm 会自动将依赖包安装在 node_module 目录下。&lt;br /&gt;
* '''repository'''：包代码存放的地方的类型，可以是 git 或 svn，git 可在 Github 上。&lt;br /&gt;
* '''main'''：main 字段指定了程序的主入口文件，require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。&lt;br /&gt;
* '''keywords'''：关键字。&lt;br /&gt;
&lt;br /&gt;
== 版本号 ==&lt;br /&gt;
使用 NPM 下载和发布代码时都会接触到版本号。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NPM 使用语义版本号来管理代码，语义版本号格式为“'''X.Y.Z'''”（主版本号.次版本号.补丁版本号）。&lt;br /&gt;
&lt;br /&gt;
当代码变更时，版本号按以下原则更新：&lt;br /&gt;
* 如果只是修复bug，需要更新 Z 位。&lt;br /&gt;
* 如果是新增了功能，但是向下兼容，需要更新 Y 位。&lt;br /&gt;
* 如果有大变动，向下不兼容，需要更新 X 位。&lt;br /&gt;
&lt;br /&gt;
版本号有了这个保证后，在申明第三方包依赖时，除了可依赖于一个固定版本号外，还可依赖于某个范围的版本号。例如 &amp;quot;argv&amp;quot;: &amp;quot;0.0.x&amp;quot; 表示依赖于 0.0.x 系列的最新版 argv。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NPM 支持的所有版本号范围指定方式可以查看[https://npmjs.org/doc/files/package.json.html#dependencies 官方文档]。&lt;br /&gt;
&lt;br /&gt;
== NPM 常用命令 ==&lt;br /&gt;
常用命令如下：&lt;br /&gt;
# 使用“'''npm help &amp;lt;command&amp;gt;'''”可查看某条命令的详细帮助，例如“npm help install”。&lt;br /&gt;
#* 使用 '''npm help''' 可查看所有命令；&lt;br /&gt;
# 在 package.json 所在目录下使用“'''npm install . -g'''”可先在本地安装当前命令行程序，可用于发布前的本地测试。&lt;br /&gt;
# 使用“'''npm update &amp;lt;package&amp;gt;'''”可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。&lt;br /&gt;
# 使用“'''npm update &amp;lt;package&amp;gt; -g'''”可以把全局安装的对应命令行程序更新至最新版。&lt;br /&gt;
# 使用“'''npm cache clear'''”可以清空NPM本地缓存，用于对付使用相同版本号发布新版本代码的人。&lt;br /&gt;
# 使用“'''npm unpublish &amp;lt;package&amp;gt;@&amp;lt;version&amp;gt;'''”可以撤销发布自己发布过的某个版本代码。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 可以在 ''' https://npmjs.org/doc/ ''' 查看官方文档，获取更多命令说明；&lt;br /&gt;
&lt;br /&gt;
== 使用淘宝 NPM 镜像 ==&lt;br /&gt;
淘宝 NPM 镜像是一个完整 npmjs.org 镜像，你可以用此代替官方版本（只读），同步频率目前为 10 分钟一次以保证尽量与官方服务同步。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 使用淘宝定制的 '''cnpm''' (gzip 压缩支持) 命令行工具代替默认的 '''npm'''：【！！！】&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ npm install -g cnpm --registry=https://registry.npm.taobao.org&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# 这样就可以使用 cnpm 命令来安装模块了：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ cnpm install [name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
</feed>