npm简介
npm是Node.js默认的模块管理器,用来安装和管理node模块。在安装node的时候,会连带一起安装npm。node安装完成后,可以用下面的命令,查看一下npm的帮助文件。
# npm命令列表
npm help
# 各个命令的简单用法
npm -l
下面的命令分别查看npm的版本和配置。
npm -version
npm config list -l
npm的版本可以在Node更新的时候一起更新。如果你想单独更新npm,使用下面的命令。
npm update -global npm
上面的命令之所以最后一个参数是npm,是因为npm本身也是Node.js的一个模块。
查看模块信息
npm的info命令可以查看每个模块的具体信息。比如,查看underscore模块信息的命令是:
npm info underscore
上面命令返回一个JavaScript对象,包含了underscore模块的详细信息。
{ name: 'underscore',
description: 'JavaScript\'s functional programming helper library.',
'dist-tags': { latest: '1.5.2', stable: '1.5.2' },
repository:
{ type: 'git',
url: 'git://github.com/jashkenas/underscore.git' },
homepage: 'http://underscorejs.org',
main: 'underscore.js',
version: '1.5.2',
devDependencies: { phantomjs: '1.9.0-1' },
licenses:
{ type: 'MIT',
url: 'https://raw.github.com/jashkenas/underscore/master/LICENSE' },
files:
[ 'underscore.js',
'underscore-min.js',
'LICENSE' ],
readmeFilename: 'README.md'}
上面这个JavaScript对象的每个成员,都可以直接从info命令查询。
npm info underscore description
# JavaScript's functional programming helper library.
npm info underscore homepage
# http://underscorejs.org
npm info underscore version
# 1.5.2
模块的安装
每个模块可以“全局安装”,也可以“本地安装”。两者的差异是模块的安装位置,以及调用方法。
“全局安装”指的是将一个模块直接下载到Node的安装目录中,各个项目都可以调用。“本地安装”指的是将一个模块下载到当前目录的node_modules子目录,然后只有在当前目录和它的子目录之中,才能调用这个模块。一般来说,全局安装只适用于工具模块,比如npm和grunt。
默认情况下,npm install 命令是“本地安装”某个模块。
npm install [package name]
使用上面的命令,模块文件将下载到当前目录的 node_modules 子目录。
使用global参数,可以“全局安装”某个模块。
sudo npm install -global [package name]
global参数可以被简化成g参数。
sudo npm install -g [package name]
install命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上@和版本号。
npm install package_name@version
一旦安装了某个模块,就可以在代码中用require命令调用这个模块。
var backbone = require('backbone')
console.log(backbone.VERSION)
模块的升级和删除
npm update 命令可以升级本地安装的模块。
npm update [package name]
加上global参数,可以升级全局安装的模块。
npm update -global [package name]
npm uninstall 命令,删除本地安装的模块。
npm uninstall [package name]
加上global参数,可以删除全局安装的模块。
sudo npm uninstall [package name] -global
模块的查看和搜索
npm list命令,默认列出当前目录安装的所有模块。如果使用global参数,就是列出全局安装的模块。
npm list
npm -global list
向服务器端搜索某个模块,使用search命令(可使用正则搜索)。
npm search [搜索词]
如果不加搜索词,npm search 默认返回服务器端的所有模块。
npm run
在package.json文件有一项scripts,用于指定脚本命令,供npm直接调用。
"scripts": {
"watch": "watchify client/main.js -o public/app.js -v",
"build": "browserify client/main.js -o public/app.js",
"start": "npm run watch & nodemon server.js"
},
上面代码在scripts项,定义了三个脚本命令,并且每个命令有一个别名。使用的时候,在命令行键入npm run后面加上别名,就能调用相应的脚本命令。
npm run watch
npm run build
npm run start
npm link
一般来说,每个项目都会在项目目录内,安装所需的模块文件。也就是说,各个模块是局部安装。但是有时候,我们希望模块是一个符号链接,连到外部文件,这时候就需要用到npm link命令。
现在模块A(moduleA)的安装目录下运行npm link命令。
/path/to/moduleA $ npm link
上面的命令会在npm的安装目录内,生成一个符号链接文件。
/usr/local/share/npm/lib/node_modules/moduleA -> /path/to/moduleA
然后,转到你需要放置该模块的项目目录,再次运行npm link命令,并指定模块名。
/path/to/my-project $ npm link moduleA
上面命令等同于生成了本地模块的符号链接。
/path/to/my-project/node_modules/moduleA -> /usr/local/share/npm/lib/node_modules/moduleA
然后,就可以在你的项目中,加载该模块了。
require('moduleA')
如果你的项目不再需要该模块,可以在项目目录内使用npm unlink命令,删除符号链接。
/path/to/my-project $ npm unlink moduleA