n=NPM是一个Node包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。有了NPM,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。npms安装:
将npm源代码解压到D:\npmjs目录中。
在命令提示符窗口中执行下面的操作,完成npm的安装:
D:\>cd npmjs
D:\npmjs>node cli.js install -gf
另外:
node cli.js install npm -gf //可以安装最新版的NPM
node cli.js install npm@1.0.105 -gf //可以安装指定版本的NPM
上面两种方法都是通过网络从代码库中下载并安装,但是代码库一般只保留最近的两个版本。
NPM安装完成后,将"D:\nodejs\node_modules"加入系统环境变量NODE_PATH中。
D:\develop\nodejs\hello>npm install -d
npm info it worked if it ends with ok
npm info using npm@1.0.103
npm info using node@v0.5.10
npm info preinstall application-name@0.0.1
npm info addNamed [ 'jade', '>= 0.0.1' ]
npm info addNamed [ 'express', '2.5.0' ]
最好设置下国内镜像要不然下载会很慢。淘宝有个npm镜像。
NPM常用的命令有:
(1)$ npm install moduleNames
安装Node模块
注意事项:如果在使用模块的时候不知道其名字,可以通过网站按照
索引值找到想要的模块。npm也提供了查询的功能 $ npm search indexName
安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块。
node的安装分为全局模式和本地模式。一般情况下会以本地模式运行,包会被安装
到和你的应用代码统计的本地node_modules目录下。在全局模式下,Node包会被
安装到Node的安装目录下的node_modules下。全局安装命令为
$ npm install -g moduleName。获知使用$npm set global=true来设定安装模式
,$npm get global可以查看当前使用的安装模式。
我最开始已经用这个安装formidable:
C:\Users\Administrator
>nmp install formidable
我的代码放在H盘:
var formidable = require('formidable'),
运行总是报错:
原因是什么呢?原来node.js 模块安装有两种方式,一种是local安装,一种是全局安装。
nmp install xxx 普通安装
npm install xxx -g 将会被安装到【全局目录】里,我的是安装在:
C:\Users\Administrator\AppData\Roaming\npm\node_modules 目录。
可以通过 npm config set prefix "目录路径" 来设置。
普通的npm会安装到当前目录,加上—global参数(简写为-g)就会安装到默认的全局目录,至于Node和npm的默认目录是哪些,建议阅读这篇文章,对于win7,8用户言,现在是默认装到Program Files\nodejs下, npm 的 repo在 %USERPROFILE%\AppData\Roaming\npm 且会自动加到系统PATH下。
1. npm install xxx -g 时, 模块将被下载安装到【全局目录】中。
【全局目录】通过 npm config set prefix "目录路径" 来设置。
2. npm install xxx ,则是将模块下载到当前命令行所在目录。
例如:
c:\123>npm install xxx
将会安装到
c:\123\node_modules\xxx
如果是全局安装,还要设置一个环境变量,
NODE_PATH =C:\Users\Administrator\AppData\Roaming\npm\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模块
(13)一个npm包是包含了package.json的文件夹,package.json描述了这个文件夹的结构。访
问npm的json文件夹的方法如下:
$ npm help json
此命令会以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打
开。
(14)发布一个npm包的时候,需要检验某个包名是否已存在
$ npm search packageName
(15)很多时候我们在使用一个npm包的时候经常会忘记了require其相互依赖的模块,我们可以
借助如如下命令来查看此模块相互依赖的包都有哪些
local安装和global安装区别:
npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如:
npm install grunt # 本地安装
npm install -g grunt-cli # 全局安装
这两种安装方式有什么区别呢?从npm官方文档的说明来看,主要区别在于(后面通过具体的例子来说明):
本地安装
1. 将安装包放在 ./node_modules 下(运行npm时所在的目录)
2. 可以通过 require() 来引入本地安装的包
全局安装
1. 将安装包放在 /usr/local 下
2. 可以直接在命令行里使用
本地安装
1、将安装包放在 ./node_modules 下(运行npm时所在的目录)
比如运行下面命令
npm install grunt --save-dev
那么,就会在当前目录下发现一个node_modules目录,进去后能够看到grunt这个包
casperchenMacBookPro:testUsemin casperchen$ ll
total 200
drwxr-xr-x 16 casperchen staff 544B 12 14 23:17 node_modules
进入node_modules
casperchenMacBookPro:node_modules casperchen$ ll
total 0
drwxr-xr-x 16 casperchen staff 544B 12 5 00:49 grunt
2、可以通过 require() 来引入本地安装的包
直接来个例子,我们在项目根目录下创建test.js,里面的内容很简单
var grunt = require('grunt');grunt.log.writeln('hello grunt');
然后在控制台运行test.js
node test.js
然后就会看到如下输出
casperchenMacBookPro:testUsemin casperchen$ node test.js
hello grunt
全局安装
1、将安装包放在 /usr/local 下
运行如下命令
npm install -g grunt-cli
然后进入/usr/local/bin目录,就会发现grunt-cli已经被放置在下面了
casperchenMacBookPro:bin casperchen$ pwd
/usr/local/bin
casperchenMacBookPro:bin casperchen$ ll grunt
lrwxr-xr-x 1 root admin 39B 8 18 21:43 grunt -> ../lib/node_modules/grunt-cli/bin/grunt
可见,全局模块的真实安装路径在/usr/local/lib/node_modules/下,/usr/local/bin下的可执行文件只是软链接而已
2、可以直接在命令行里使用
实现细节在上面其实就讲到了,通过在`/usr/local/bin下创建软链接的方式实现。这里不赘述
更直观的例子
下面就直接看下,当我们在项目目录下运行grunt task(task为具体的grunt任务名,自行替换)时,发生了什么事情。这里要借助node-inspector。
首先,没接触过node-inspector的童鞋可以参考之前的文章了解下
运行如下命令开启调试
node-inspector &
见到如下输出
casperchenMacBookPro:tmp casperchen$ node-inspector &
[1] 14390
casperchenMacBookPro:tmp casperchen$ Node Inspector v0.6.1
info - socket.io started
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.
接着,在当前任务下运行grunt任务
^CcasperchenMacBookPro:testUsemin casperchen$ node --debug-brk $(which grunt) dev
debugger listening on port 5858
接着,打开chrome浏览器,输入网址http://127.0.0.1:8080/debug?port=5858,就会自动进入断点调试状态,从一旁显示的tips可以看到,全局命令grunt其实就是/usr/local/lib/node_modules/grunt-cli/bin/grunt。
按下F8接着往下跑,就会进如Gruntfile.js,此时的grunt,是本地安装的一个node包,全局命令跟本地的包名字一样,挺有迷惑性的。软件自学网
linux npm安装:
就像NPM的官网 上介绍的那样,安装NPM仅仅是一行命令的事情:
curl http://npmjs.org/install.sh | sh
这里详解一下这句命令的意思,curl http://npmjs.org/install.sh是通过curl命令获取这个安装shell脚本,按后通过管道符| 将获取的脚本交由sh命令来执行。这里如果没有权限会安装不成功,需要加上sudo来确保权限:
curl http://npmjs.org/install.sh | sudo sh
安装成功后执行npm命令,会得到一下的提示:
Usage: npm <command>
where <command> is one of:
adduser, apihelp, author, bin, bugs, c, cache, completion,
config, deprecate, docs, edit, explore, faq, find, get,
help, help-search, home, i, info, init, install, la, link,
list, ll, ln, ls, outdated, owner, pack, prefix, prune,
publish, r, rb, rebuild, remove, restart, rm, root,
run-script, s, se, search, set, show, star, start, stop,
submodule, tag, test, un, uninstall, unlink, unpublish,
unstar, up, update, version, view, whoami
我们以underscore为例,来展示下通过npm安装第三方包的过程。
npm install underscore
返回:
underscore@1.2.2 ./node_modules/underscore
由于一些特殊的网络环境,直接通过npm install命令安装第三方库的时候,经常会出现卡死的状态。幸运的是国内CNode社区的@fire9 同学利用空余时间搭建了一个镜像的NPM资源库,服务器架设在日本,可以绕过某些不必要的网络问题。你可以通过以下这条命令来安装第三方库:
npm --registry "http://npm.hacknodejs.com/
" install underscore
通过npm安装包。安裝好之後會自動被安裝到 /usr/local/bin 目錄下,而相依的函式庫也會自動安裝到/usr/local/lib/node 目錄下,實在是非常方便。
npm使用
npm init 会引导你创建一个package.json文件,包括名称、版本、作者这些信息等
使用package.json
在Pakcage.json所在目录npm install就可以安装了
在国内npm很慢,加速办法
换成镜像http://npm.taobao.org/
你可以使用我们定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm
:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
或者你直接通过添加 npm
参数 alias
一个新命令:
alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"
# Or alias it in .bashrc or .zshrc
$ echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc
安装模块
从 registry.npm.taobao.org 安装所有模块. 当安装的时候发现安装的模块还没有同步过来, 淘宝 NPM 会自动在后台进行同步, 并且会让你从官方 NPMregistry.npmjs.org 进行安装. 下次你再安装这个模块的时候, 就会直接从 淘宝 NPM 安装了.
$ cnpm install [name]
同步模块
直接通过 sync
命令马上同步一个模块, 只有 cnpm
命令行才有此功能:
$ cnpm sync connect
当然, 你可以直接通过 web 方式来同步: /sync/connect
$ open https://npm.taobao.org/sync/connect
另外还可以通过
1.通过config命令
npm config set registry https://registry.npm.taobao.org
npm info underscore (如果上面配置正确这个命令会有字符串response)
这种方法也是把所谓的user config写入到 ~/.npmrc文件的!!
node_modules
文件夹时提示该文件夹包含名称过长删除不了
cmd下rmdir /s/q your_app_dir
来删除
npm install rimraf -g
rimraf node_modules