npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。通过npm可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。
npm的官网:https://www.npmjs.com/,npm的官方帮助文档:https://docs.npmjs.com/
1、npm install moduleNames:安装Node模块
安装完毕后会在当前目录下生成一个node_modules目录,其目录下就是安装的各个node模块。
node的安装分为全局模式和本地模式。
一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。
在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。
全局安装命令为$npm install -g moduleName。
获知使用$npm set global=true来设定安装模式,$npm get global可以查看当前使用的安装模式。
示例:
npm install express
默认会安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install [email protected]
npm install-g
将包安装到全局环境中
注意在代码中直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令
下面介绍一下本地安装与全局安装的区别:
本地安装
1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
2. 可以通过 require() 来引入本地安装的包。
全局安装
1. 将安装包放在 /usr/local 下。
2. 可以直接在命令行里使用。
3. 不能通过 require() 来引入本地安装的包。
npm install--save
安装的同时,将信息写入package.json中项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到github时,就不用提交node_modules这个文件夹了。
2、npm view moduleNames:查看node模块的package.json文件夹
注意事项:如果想要查看package.json文件夹下某个标签的内容,可以使用$npm view moduleName labelName
3、npm list:查看当前目录下已安装的node包
注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。$ npm list parseable=true可以目录的形式来展现当前安装的所有node包
4、npm help:查看帮助命令
5、npm view moudleName dependencies:查看包的依赖关系
6、npm view moduleName repository.url:查看包的源文件地址
7、npm view moduleName engines:查看包所依赖的Node的版本
8、npm help folders:查看npm使用的所有文件夹
9、npm rebuild moduleName:用于更改包内容后进行重建
10、npm outdated:检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新
11、npm update moduleName:更新node模块
12、npm uninstall moudleName:卸载node模块
13npm cache clean 清理缓存
14、一个npm包是包含了package.json的文件夹,package.json描述了这个文件夹的结构。访问npm的json文件夹的方法如下:
$ npm help json
此命令会以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打开。
15、发布一个npm包的时候,需要检验某个包名是否已存在
$ npm search packageName
16、npm init:会引导你创建一个package.json文件,包括名称、版本、作者这些信息等
17、npm remove移除
18、npm ls 列出当前安装的了所有包
19、npm root:查看当前包的安装路径
npm root -g:查看全局的包的安装路径
20、npm -v:查看npm安装的版本
更换npm源
由于npm的源在国外,所以国内用户使用起来各种不方便。下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选择使用。
淘宝npm镜像
搜索地址:http://npm.taobao.org/
registry地址:http://registry.npm.taobao.org/
cnpmjs镜像
搜索地址:http://cnpmjs.org/
registry地址:http://r.cnpmjs.org/
下面以淘宝npm为例介绍如何使用:
1.临时使用
npm --registry https://registry.npm.taobao.org install express
2.持久使用
npm config set registry https://registry.npm.taobao.org
// 配置后可通过下面方式来验证是否成功
npm config get registry
// 或
npm info express
3.通过cnpm使用
npm install -g cnpm --registry=https://registry.npm.taobao.org
// 使用
cnpm install express
二、package.json详解
package.json 位于模块的目录下,用于定义包的属性。接下来让我们来看下 zookeeper 包的 package.json 文件,位于 node_modules/zookeeper/package.json 内容
{ "name": "zookeeper", "description": "apache zookeeper client (zookeeper async API >= 3.4.0)", "version": "3.4.8-1", "author": { "name": "Yuri Finkelstein", "email": "[email protected]" }, "contributors": [ { "name": "Yuri Finkelstein", "email": "[email protected]" }, { "name": "Woody Anderson", "email": "[email protected]" }, { "name": "Mark Cavage", "email": "[email protected]" }, { "name": "Dave Dopson", "email": "[email protected]" }, { "name": "David Trejo", "email": "[email protected]" }, { "name": "Pooya Karimian", "email": "[email protected]" }, { "name": "Jakub Lekstan", "email": "[email protected]" }, { "name": "Matt Lavin", "email": "[email protected]" }, { "name": "Roy Cheng", "email": "[email protected]" } ], "repository": { "type": "git", "url": "git+https://github.com/yfinkelstein/node-zookeeper.git" }, "keywords": [ "apache", "zookeeper", "client" ], "dependencies": { "async": "~0.2.6", "nan": "~2.0.9", "underscore": "*" }, "devDependencies": { "log4js": "~0.6.0", "webworker": ">=0.8.4" }, "main": "lib/index", "scripts": { "build": "node-gyp configure build", "test": "pushd test; ./test; popd", "prepublish": "./scripts/prepublish.sh", "install": "node-gyp rebuild" }, "engines": { "node": ">=0.8" }, "gypfile": true, "gitHead": "61b57899a7841eca566b98ad155a35c65a6588ca", "bugs": { "url": "https://github.com/yfinkelstein/node-zookeeper/issues" }, "homepage": "https://github.com/yfinkelstein/node-zookeeper#readme", "_id": "[email protected]", "_shasum": "1c3c2575460567117bdc637f7d62cb1727d0b054", "_from": "[email protected]", "_npmVersion": "3.8.2", "_nodeVersion": "4.4.0", "_npmUser": { "name": "mdlavin", "email": "[email protected]" }, "dist": { "shasum": "1c3c2575460567117bdc637f7d62cb1727d0b054", "tarball": "https://registry.npmjs.org/zookeeper/-/zookeeper-3.4.8-1.tgz" }, "maintainers": [ { "name": "woodya", "email": "[email protected]" }, { "name": "ddopson", "email": "[email protected]" }, { "name": "yfinkelstein", "email": "[email protected]" }, { "name": "josephmoniz", "email": "[email protected]" }, { "name": "mcavage", "email": "[email protected]" }, { "name": "kuebk", "email": "[email protected]" }, { "name": "mdlavin", "email": "[email protected]" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/zookeeper-3.4.8-1.tgz_1458267465884_0.18325493787415326" }, "directories": {}, "_resolved": "https://registry.npmjs.org/zookeeper/-/zookeeper-3.4.8-1.tgz", "readme": "ERROR: No README data found!" }
Package.json 属性说明
name - 包名。
version - 包的版本号。
description - 包的描述。
homepage - 包的官网 url 。
author - 包的作者姓名。
contributors - 包的其他贡献者姓名。
dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。
keywords - 关键字
版本号
使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下。
语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。
如果只是修复bug,需要更新Z位。
如果是新增了功能,但是向下兼容,需要更新Y位。
如果有大变动,向下不兼容,需要更新X位。
版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。
NPM支持的所有版本号范围指定方式可以查看官方文档。
欢迎转载,转载请注明来源:一路博客:http://www.16boke.com/article/detail/150