调整字号

npm入门

npm 是 Node.js 的包管理工具。通过它能够非常方便地下载别人编写的包,用在自己的项目中,或把自己编写的包发布给其他人使用。npm 一般随同 Node.js 一起安装,要查看是否已安装 npm,运行:

npm -v

使用淘宝镜像

由于墙的原因,连接 npm 服务器非常困难,建议用淘宝的 npm 镜像,叫做 cnpm,执行以下命令:

npm install -g cnpm --registry=https://registry.npm.taobao.org

然后,就可以用 cnpm 命令来代替 npm 使用。

npm 是一个库,上面存放着大量的第三方程序,有点像 GitHub,这些程序主要有两种,一种是包(package),用 JavaScript 编写,作为 Node 模块使用,另一种是命令行程序(也叫 CLI,Command Line Interface),直接在命令行中当成命令使用,比如上面的 cnpm。你也可以自己开发一个包或 CLI 发布到 npm 上。

安装 npm 包

要安装一个 npm 包,执行

npm install lodash

就会在你的当前目录中生成一个 node_modules 子目录,并且下载 lodash 包到这个目录。接着就可以在项目里用 require('lodash') 使用这个模块。

如果要安装的是命令行程序,一般会加上 -g,这样命令才能在任意目录下使用,比如安装 Grunt 时:

npm install grunt-cli -g

另外一种安装 npm 包的方式是使用 package.json。假如目录下有这样一个 package.json 文件

{
  "name": "demo",
  "version": "1.0.0",
  "denpendencies": {
    "grunt": "0.4.0"
  }
}

那么在该目录下执行 npm install 即可自动安装 dependencies 下列出的所有依赖的包。在这个例子中是 0.4.0 版本的 grunt。

package.json 是 npm 包的描述文件,如果要把一个 Node 包发布到 npm 上,也必须要有此文件,package.json 内含包的名称、版本以及依赖等等信息。在安装模块时如果加上 --save 参数

npm install grunt --save

那么会把该条依赖添加进 package.json 的 dependencies

要删除一个包,执行

npm uninstall lodash

如果要从 dependencies 里也删除,还是加上 --save

Semver

npm 使用语义化的版本号(也叫 semver,semantic versioning),用 X.Y.Z 的形式来表示。如果你的包要发布给别人使用,版本应当从 1.0.0 开始,然后更新版本号时应该遵循下面这样的规则:

  • bug 修复和其他的次要更新,应当增加最后一位的值,如 1.0.1
  • 增加了新特性但不影响之前的功能,增加中间位的值,如 1.1.0
  • 改变了代码而且不再向后兼容,增加第一位值,如 2.0.0

指定一个版本范围

dependencies 中,除了直接指定一个版本号,也可以使用一些语法来指定一个版本范围,比如

{
  "name": "demo",
  "version": "1.0.0",
  "denpendencies": {
    "grunt": ">0.4.0"
  }
}

上例表示使用的 grunt 是大于 0.4.0 的版本,例如 0.4.1、0.5.1、0.5.11 等。npm 在根据自动安装这些包时,会下载这个范围里的最新版本。 类似的符号有>=<<=

还有一些常见的符号:

X.Y.Z-A.B.C 指定从版本 X.Y.Z 到 A.B.C:

{
  "name": "demo",
  "version": "1.0.0",
  "denpendencies": {
    "demo1": "1.2.3-2.3.4", // >=1.2.3 <=2.3.4
    "demo2": "1.2 - 2.3.4", // >=1.2.0 <=2.3.4
    "demo3": "1.2.3 - 2.3", // >=1.2.3 <2.4.0
    "demo4": "1.2.3 - 2"    // >=1.2.3 <3.0.0
  }
}

使用 Xx* 来替换:

{
  "name": "demo",
  "version": "1.0.0",
  "denpendencies": {
    "demo1": "1.x",   // >=1.0.0 <2.0.0
    "demo2": "1.2.x", // >=1.2.0 <1.3.0
    "demo3": "1",     // 相当于1.x.x
    "demo4": "1.2",   // 相当于1.2.x
    "demo5": "*",     // >=0.0.0
    "demo6": ""       // 等同于"*"
  }
}

~X.Y.Z:只允许 Z 的增加。如果只指定了 X 那么也允许 Y 增加:

{
  "name": "demo",
  "version": "1.0.0",
  "denpendencies": {
    "demo1": "~1.2.3",   // >=1.2.3 <1.3.0
    "demo2": "~1.2", // >=1.2.0 <1.3.0
    "demo3": "~1"     // >=1.0.0 <2.0.0
  }
}

^X.Y.Z:XYZ 中最靠左的非零数字不能发生变动:

{
  "name": "demo",
  "version": "1.0.0",
  "denpendencies": {
    "demo1": "^1.2.3",  // >=1.2.3 <2.0.0
    "demo2": "^0.2.3",  // >=0.2.3 <0.3.0
    "demo3": "^0.0.3"   // >=0.0.3 <0.0.4
  }
}
还没有评论,沙发空缺中……
flight