切换npm的官方源为淘宝镜像源

 Nodejs  切换npm的官方源为淘宝镜像源已关闭评论
3月 192018
 

前言

npm的连接地址建议换成淘宝npm镜像的地址,原因就是下载速度快些(吐嘈下阿里云机器,下载也是龟速!!)

默认的npm下载地址:http://www.npmjs.org/ 
淘宝npm镜像的地址:https://npm.taobao.org/

临时使用淘宝源

npm --registry https://registry.npm.taobao.org install [email protected] 

全局配置切换到淘宝源

npm config set registry https://registry.npm.taobao.org 

全局配置切换到官方源

npm config set registry https://registry.npmjs.org/ 

检测是否切换到了淘宝源

npm info underscore
.......

gitHead: 'e4743ab712b8ab42ad4ccb48b155034d02394e4d',
  dist: 
   { shasum: '4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022',
     size: 34172,
     noattachment: false, // 有 registry.npm.taobao.org 等字样  说明切换成功 tarball: 'http://registry.npm.taobao.org/underscore/download/underscore-1.8.3.tgz' },
  directories: {},
  publish_time: 1427988774520 }

.......

12月 032014
 

好文章,收藏下。

npm 是 Node.js 的模块依赖管理工具。作为开发者使用的工具,主要解决开发 Node.js 时会遇到的问题。如同 RubyGems 对于 Ruby 开发者和 Maven 对于 Java 开发者的重要性,npm 对与 Node.js 的开发者和社区的重要性不言而喻。本文包括五点:package.json 、npm 的配置、npm install 命令、npm link 命令和其它 npm 命令。

package.json

npm命令运行时会读取当前目录的 package.json 文件和解释这个文件,这个文件基于Packages/1.1 规范。在这个文件里你可以定义你的应用名称( name )、应用描述( description )、关键字( keywords )、版本号( version )、应用的配置项( config )、主页( homepage )、作者( author )、资源仓库地址( repository )、bug的提交地址( bugs ),授权方式( licenses )、目录( directories )、应用入口文件( main )、命令行文件( bin )、应用依赖模块( dependencies )、开发环境依赖模块( devDependencies )、运行引擎( engines )和脚本( scripts )等。

对于开发者而言,开发和发布模块都依赖于他对这个文件 package.json 所包含的意义的正确理解。我们下面用一个本文共用的例子来说明:

{
    "name": "test",
    "version": "0.1.0",
    "description": "A testing package",
    "author": "A messed author <[email protected]>",
    "dependencies": {
        "express": "1.x.x",
        "ejs": "0.4.2",
        "redis": ">= 0.6.7"
    },
    "devDependencies": {
        "vows": "0.5.x"
    },
    "main": "index",
    "bin": {
        "test": "./bin/test.js"
    },
    "scripts": {
        "start": "node server.js",
        "test": "vows test/*.js",
        "preinstall": "./configure",
        "install": "make && make install"
    },
    "engines": {
        "node": "0.4.x"
    }
}

这个例子里我们定义了应用的入口文件( main )为 index ,当其他应用引用了我们的模块 require(‘test’) 时,这个 main 的值 index.js 文件被调用。脚本( scripts )使用hash 表定义了几个不同的命令。script.start 里的定义的 node server.js 会在 npm start 时被调用,同样的 npm test 调用时对应的 scripts.test 里定义的命令被调用。在有些 native 模块需要编译的话,我们可以定义预编译和编译的命令。本例中还定义了应用依赖模块( dependencies )和开发环境依赖模块( devDependencies )。应用依赖模块会在安装时安装到当前模块的 node_modules 目录下。开发环境依赖模块主要时在开发环境中用到的依赖模块,用命令 npm 的命令 install 或 link 加上参数 —dev 安装到当前模块的 node_modules 目录下。

大家也注意到 package.json 里的版本号有些是 >= 0.6.7 有些是 1.x.x,这有什么区别?npm 使用于语义化的版本识别来进行版本管理。并不是所有的模块都会提供向后兼容性,有时候某些模块因为某些原因导致不向后兼容。所以我们需要定义一些规则来保证模块能够在某些特定的版本中可用,并且保证能用最新的版本,因为那些版本总是修改了一些 bug 或提升了性能等。我们来看一下版本定义的字段:0.4.2

  • 主版本( 0 )
  • 副版本( 4 )
  • 补丁版本( 2 )

在上面 package.json 的定义里我们确信模块在所有的 Nodejs 0.4及以上和0.5以下版本里都能运行。依赖模块 redis 在所有大于或等于0.6.7的版本上都能运行,依赖模块 ejs 只能确保运行在0.4.2版本里,依赖模块 express 确保能够兼容大于或等于1.0.0并且小于2.0.0。

npm 的配置

npm 拥有很多默认配置。你可以使用这些默认的配置,也可以修改这些默认的配置,甚至可以在环境变量或命令行下修改这些配置。配置的权重是如下顺序定义的:

  1. 命令行,使用—为前缀的参数。比如 —foo bar,设定变量 foo 的值为” bar “。—foo 后不带值的参数,设定 foo 的值为 true 。
  2. 环境变量,所有 npm_config_ 为前缀的环境变量。比如 npm_config_foo = bar ,设定变量 foo 为 “ bar “。
  3. 用户定义。所有的变量存储在 $HOME/.npmrc 文件里的变量。
  4. 全局。所有 $PREFIX/etc/npmrc 文件里的变量。$PREFIX 变量可通过 npm prefix -g 获取,一般默认是 /usr/local。
  5. 内置的配置。通过安装时运行 ./configure 所定义的变量。可通过命令curlhttp://npmjs.org/install.sh | env npm_config_foo=bar sh 设置。

使用配置能给我们带来很大的灵活性。比如我们使用 npm install 时,对默认的资源库地址https://registry.npmjs.org/ 不是很满意,我们可以使用下面的命令来更改资源库地址。

npm --registry "an other registry" install express
# 或者下面的命令
env npm_config_registry="an other registry" npm install express 

或是对 npm 默认的 vi 编辑器不满意,直接命令 npm set editor mate 。npm 的配置可通过命令 npm config ls 获取。这个命令是获取修改后的配置,要获取包括默认配置的全部配置加上 -l 参数。值得注意的是,开发者通过 npm config set registry “an other registry” 的方式修改 registry 这个属性值,一定要明白这个修改这个值所带来的负面效应。一旦设置了 registry 这个值,当你要 publish 一个模块,会把模块发布到修改后的资源库里,而不是原始默认的资源库。其他的资源库是原始默认的资源库的一个复制品,定时从默认的资源库取资源。一般来说,没有把其新家的模块同步到默认的资源库的能力。这样会导致发生你的模块在修改后的资源库里能够找到,而在其它的资源库里找不到的事情。

npm install命令

安装模块只需要 npm install express connect 命令给我们带来了很大的方便。安装模块的路径分两种:

  • 全局路径,也就是带上参数 -g 的安装模式。这个命令会把模块安装在 $PREFIX/lib/node_modules 下,可通过命令 npm root -g 查看全局模块的安装目录。 package.json 里定义的bin会安装到 $PREFIX/bin 目录下,如果模块带有 man page 会安装到 $PREFIX/share/man 目录下。
  • 本地路径,不带 -g 参数的。从当前目录一直查找到根目录/下有没有 node_modules 目录,有模块安装到这个目录下的 node_modules 目录里,如果没有找到则把模块安装到当前目录 node_modules 目录下。package.josn 定义的 bin 会安装到 node_modules/.bin 目录下,man page 则不会安装。

我们需要选择什么样的安装方式呢?全局模式可以让你不用担心找不到模块,如果不需要还是尽量避免全局模式。

  • 如果我们只是 require(‘pkg’) 一个模块,我们不需要使用全局模式。
  • 如果我们需要在命令行中调用,我们需要使用全局模式。因为这个安装把 package.josn里 bin 下的定义安装到 $PATH 目录下。

有些模块我们既需要在命令行中调用又想 require(‘pkg’) ,比如 Coffee-script 。那么我们可以使用全局模式安装,然后使用下一段要讲的命令 npm link 把它链接到本地的 node_modules 目录下。

不要担心 package.josn 里 script 中定义的命令会不会因为不是全局安装而不能运行。比如在例子里定义的 devDependencies 的 vows 。在调用 npm test 时 npm 会把 node_modules/.bin 目录放到环境变量 $PATH 的最前面。

npm link命令

对开发者而言,这算是最有价值的命令。假设我们开发了一个模块叫 test ,然后我们在 test-example 里引用这个模块 ,每次 test 模块的变动我们都需要反映到 test-example 模块里。不要担心,有了 npm link 命令一切变的非常容易。

首先我们需要把 test 链接到全局模式下:

cd ~/work/node/test # 进入test模块目录
npm link # 创建链接到$PREFIX/lib/node_modules

那么 test 的模块将被链接到 $PREFIX/lib/node_modules 下,就像我的机器上 $PREFIX 指到 /usr/local ,那么 /usr/local/lib/node_modules/test 将会链接到 ~/work/node/test 下。执行脚本 bin/test.js 被链接到 /usr/local/bin/test 上。

接下来我们需要把 test 引用到 test-example 项目中来:

cd ~/work/node/test-example # 进入test-example模块目录
npm link test # 把全局模式的模块链接到本地

npm link test 命令会去 $PREFIX/lib/node_modules 目录下查找名叫 test 的模块,找到这个模块后把 $PREFIX/lib/node_modules/test 的目录链接到 ~/work/node/test-example/node_modules/test 这个目录上来。

现在任何 test 模块上的改动都会直接映射到 test-example 上来。再比如假设我们开发很多应用,每个应用都用到 Coffee-script :

npm install coffee-script -g # 全局模式下安装coffee-script
cd ~/work/node/test # 进入开发目录
npm link coffee-script # 把全局模式的coffee-script模块链接到本地的node_modules下
cd ../test-example # 进入另外的一个开发目录
npm link coffee-script # 把全局模式的coffee-script模块链接到本地
npm update coffee-script -g # 更新全局模式的coffee-script,所有link过去的项目同时更新了。

就像你看到,npm link 对于开发时一个模块被多个模块引用时非常有用。windows 的用户会想,我这儿没有 UNIX 下的 link 工具怎么办?别担心只要你的 Node.js 支持 fs.symlink 就可用到这个特性。

其它 npm 命令

npm 命令里还有很多有用的命令。npm explore . — git pull origin master ,更新当前的 git 资源库。npm edit . ,编辑当前模块的所有依赖模块。npm docs coffee-script ,打开 coffee-script 模块的文档。npm outdated coffee-script ,查看 coffee-script 是否有新版本。npm submodule . ,你可以要求你的依赖模块是从 git 资源库安装的,而不是从 registry 安装。因为作者的 git 资源库总是最新的版本,registry 上的是模块作者发布上去的稳定版本。甚至你可以用 npm 来编程。

var npm = require('npm');
npm.load({}, function (err) {
    if (err) return commandFailed(err);
    npm.on("log", function (message) {
        if (arg) console.log(message)
    })
    var requirements = JSON.parse(fs.readFileSync('config/requirements.json'));
    npm.commands.install(requirements, function (err, data) {
        if (err) return commandFailed(err);
    });
});

做为 Node.js 的开发者工具,npm 已经为我们想到很多的应用场景。这也是 Node.js 社区一致推荐它为开发者模块依赖管理工具。

来自:http://www.infoq.com/cn/articles/msh-using-npm-manage-node.js-dependence/

 Posted by at 下午12:23  Tagged with:
8月 282014
 

收集了一些关于npm的资料,记录下。

一、安装NPM

NPM的全称是Node Package Manager,如果你熟悉ruby的gem,Python的PyPL、setuptools,PHP的pear,那么你就知道NPM的作用是什么了。没错,它就是Nodejs的包管理器。Nodejs自身提供了基本的模块。但是在这些基本模块上开发实际应用需要较多的工作。所幸的是笔者执笔此文的时候NPM上已经有了5112个Nodejs库或框架,这些库从各个方面可以帮助Nodejs的开发者完成较为复杂的应用。这些库的数量和活跃也从侧面反映出Nodejs社区的发展是十分神速和活跃的。下面我将介绍安装NPM和通过NPM安装Nodejs的第三方库,以及在大陆的网络环境下,如何更好的利用NPM。

Unix/Linux下安装NPM

就像NPM的官网(http://npmjs.org/)上介绍的那样,安装NPM仅仅是一行命令的事情:

curl http://npmjs.org/install.sh | sh

这里详解一下这句命令的意思,curl http://npmjs.org/install.sh是通过curl命令获取这个安装shell脚本,按后通过管道符| 将获取的脚本交由sh命令来执行。这里如果没有权限会安装不成功,需要加上sudo来确保权限:

curl https://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

返回:

[email protected] ./node_modules/underscore

由于一些特殊的网络环境,直接通过npm install命令安装第三方库的时候,经常会出现卡死的状态。幸运的是国内CNode社区的@fire9同学利用空余时间搭建了一个镜像的NPM资源库,服务器架设在日本,可以绕过某些不必要的网络问题。你可以通过以下这条命令来安装第三方库:

npm –registry “http://npm.hacknodejs.com/” install underscore

如果你想将它设为默认的资源库,运行下面这条命令即可:

npm config set registry “http://npm.hacknodejs.com/

设置之后每次安装时就可以不用带上—registry参数。值得一提的是还有另一个镜像可用,该镜像地址是http://registry.npmjs.vitecho.com,如需使用,替换上面两行命令的地址即可。

二、NPM常用命令介绍

npm install xxx 安装模块 

npm install [email protected] 安装1.1.1版本的xxx

npm install xxx -g 将模块安装到全局环境中。

 npm ls 查看安装的模块及依赖
npm ls -g 查看全局安装的模块及依赖 

npm uninstall xxx (-g) 卸载模块 

npm cache clean 清理缓存 

npm help xxx 查看帮助 

npm view moudleName dependencies 查看包的依赖关系 

npm view moduleNames 查看node模块的package.json文件夹 

npm view moduleName labelName 查看package.json文件夹下某个标签的内容 

npm view moduleName repository.url 查看包的源文件地址 

npm view moduleName engines 查看包所依赖的Node的版本 

npm help folders 查看npm使用的所有文件夹 

npm rebuild moduleName 用于更改包内容后进行重建 

npm outdated  检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新 

npm update moduleName 更新node模块

  更多命令参考:https://npmjs.org/doc/

三、本地安装与全局安装

npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如

npminstall grunt# 本地安装npminstall -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:testUsemincasperchen$lltotal200drwxr-xr-x16casperchenstaff544B12 14 23:17node_modules

进入node_modules

casperchenMacBookPro:node_modulescasperchen$lltotal0drwxr-xr-x16casperchenstaff544B12 5 00:49grunt

2、可以通过 require() 来引入本地安装的包

直接来个例子,我们在项目根目录下创建test.js,里面的内容很简单

vargrunt=require(‘grunt’);grunt.log.writeln(‘hello grunt’);

然后在控制台运行test.js

node test.js

然后就会看到如下输出

casperchenMacBookPro:testUsemin casperchen$node test.js
hello grunt

全局安装

1、将安装包放在 /usr/local 下

运行如下命令

npminstall -g grunt-cli

然后进入/usr/local/bin目录,就会发现grunt-cli已经被放置在下面了

casperchenMacBookPro:bin casperchen$pwd
/usr/local/bincasperchenMacBookPro:bin casperchen$ll grunt
lrwxr-xr-x1root admin39B81821:43grunt -> ../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]14390casperchenMacBookPro:tmp casperchen$NodeInspectorv0.6.1info – socket.io startedVisithttp://127.0.0.1:8080/debug?port=5858to start debugging.

接着,在当前任务下运行grunt任务

^CcasperchenMacBookPro:testUsemincasperchen$node –debug-brk$(which grunt) dev
debugger listening on port5858

接着,打开chrome浏览器,输入网址http://127.0.0.1:8080/debug?port=5858,就会自动进入断点调试状态
。从一旁显示的tips可以看到,全局命令grunt其实就是/usr/local/lib/node_modules/grunt-cli/bin/grunt
image

按下F8接着往下跑,就会进如Gruntfile.js,此时的grunt,是本地安装的一个node包。全局命令跟本地的包名字一样,挺有迷惑性的。
image

NodeJS ——-NPM的使用

 Nodejs  NodeJS ——-NPM的使用已关闭评论
2月 272013
 

NPM是一个Node包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。有了NPM,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。

NPM常用的命令有:

(1)$ npm install moduleNames

安装Node模块

注意事项:如果在使用模块的时候不知道其名字,可以通过http://search.npmjs.org网站按照

索引值找到想要的模块。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可以查看当前使用的安装模式。

(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