原文: http://www.sitepoint.com/beginners-guide-node-package-manager/

Installing Node.js

验证你的安装是否成功.

$ node
> console.log('Node is running');
Node is running
> .help
.break Sometimes you get stuck, this gets you out
.clear Alias for .break
.exit Exit the repl
.help Show repl options
.load Load JS from a file into the REPL session
.save Save all evaluated commands in this REPL session to a file
> .exit

Node已经安装成功了, 现在看看npm是否安装成功, 安装的是哪个版本的npm.

$ npm -v
1.4.28

(我的是)

Node Packaged Modules

npm安装packages分为本地和全局两种模式. 在本地模式下安装会将package安装在你当前目录下的node_modules目录下. 用全局模式安装会安装到{prefix}/lib/node_modules/ 文件夹下({prefix} 通常是/usr/ 或者 /usr/local). 这意味这你可能需要使用sudo来安装全局package.

修改全局package的安装目录

看看npm config输出的是什么东西

$ npm config list

现在我们知道了全局位置.

$ npm config get prefix
/usr/local

这个prefix就是我们想修改的, 为了全局package安装在我们的home目录下, 我们在home目录下创建一个新的文件夹

$ cd && mkdir .node_modules_global
$ npm config set prefix=$HOME/.node_modules_global

简单的修改后, 全局package的目录已经修改好了. 现在在home目录下创建一个.npmrc文件.

$ npm config get prefix
/home/sitepoint/.node_modules_global
$ cat .npmrc
prefix=/home/sitepoint/.node_modules_global

因为我们修改了全局package的安装位置我们需要重新安装npm, 这次我们会在新的位置安装

$ npm install npm --global
npm@2.6.0 /home/sitepoint/.node_modules_global/lib/node_modules/npm

最后, 我们需要添加.node_modules_global/bin 到我们的$PATH环境变量. 运行完下面的命令记得重启terminal.

export PATH="$HOME/.node_modules_global/bin:$PATH"

运行下面的命令看看现在npm安装在哪个目录, 安装的是哪个版本的npm.  

$ which npm
/home/sitepoint/.node_modules_global/bin/npm
$ npm -v
2.6.0

(我就不修改目录了)

用全局模式安装package

目前位置我们只用全局模式安装了一个package那就是npm自己. 现在让我们用全局模式来安装uglifyjs. 我么使用 --global flag,  他有一个缩写是 -g.

$ npm install uglify-js --global
uglify-js@2.4.16 node_modules/uglify-js
├── uglify-to-browserify@1.0.2
├── async@0.2.10
├── optimist@0.3.7 (wordwrap@0.0.2)
└── source-map@0.1.34 (amdefine@0.1.0)

通过输出你能看出另外4个package也被安装了 – 这是因为uglify-js依赖于这4个package.

看看都安装了哪些全局package

使用npm list命令查看安装了哪些全局包.

$ npm list --global
├─┬ npm@2.6.0
│ ├── abbrev@1.0.5
│ ├── ansi@0.3.0
....................
└─┬ uglify-js@2.4.16
├── async@0.2.10
├─┬ optimist@0.3.7
│ └── wordwrap@0.0.2
├─┬ source-map@0.1.34
│ └── amdefine@0.1.0
└── uglify-to-browserify@1.0.2

这个输出的内容非常的多, 他把我们安装package的依赖package也输出了. 我们可以使用--depth=0.

$ npm list -g --depth=0
├── npm@2.1.11
└── uglify-js@2.4.16

我们可以使用我们刚安装的uglifyjs解析js. 下面的命令会 minify example.js 到 example.min.js:

$ uglifyjs example.js -o example.min.js

用本地模式安装package

去除--global就是用本地模式安装package了. package会安装在你当前目录下的node_modules文件夹下. 现在在home目录下创建一个project目录

$ mkdir ~/project && cd ~/project
$ npm install underscore
underscore@1.8.2 node_modules/underscore
$ ls
node_modules
$ ls node_modules
underscore

列出安装了哪些本地package

$ npm list
/home/sitepoint/project
└── underscore@1.8.2

卸载本地package

npm是一个包管理器, 因此我们肯定也能使用它来卸载package:

$ npm uninstall underscore
unbuild underscore@1.8.2
$ npm list
/home/sitepoint/project
└── (empty)

指定安装某个版本的package

在@后写版本好即可.

$ npm install underscore@1.7.0
underscore@1.7.0 node_modules/underscore
$ npm list
/home/sitepoint/project
└── underscore@1.7.0

更新 Package

$ npm update underscore
underscore@1.8.2 node_modules/underscore
$ npm list
/home/sitepoint/project
└── underscore@1.8.2

搜索查找Packages

本文多次使用了 mkdir命令. 有没有一个node package能做同样的事情呢?  让我们找找

$ npm search mkdir
npm WARN Building the local index for the first time, please be patient
mkdirp

管理Cache

当npm安装一个package时它会自动保留一个copy, 这样下次你想安装这个package的时候, 它不需要去网上下载了, 直接去拿这个copy就好了. 这些copy都缓存在home目录下的.npm目录下.

$ ls ~/.npm
npm registry.npmjs.org underscore ...

这个目录下的packagek可能有很多老的版本的package, 所以有的时候我们需要清理他们.

$ npm cache clean

管理Dependencies

手动安装依赖非常不明智, 我们可以在项目的根目录下使用package.json管理package. 可以使用npm init 创建package.json

$ npm init
This utility will walk you through creating a package.json file.
Press ^C at any time to quit.
name: (project) demo
version: (1.0.0)
description: Demo of package.json
entry point: (main.js)
test command:
git repository:
keywords:
author: Sitepoint
license: (ISC)

package.json的内容如下:

{
"name": "demo",
"version": "1.0.0",
"description": "Demo package.json",
"main": "main.js",
"dependencies": {
"mkdirp": "^0.5.0",
"underscore": "^1.8.2"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Sitepoint",
"license": "ISC"
}

可以添加private: true 避免在运行npm  installl 时出现的一些警告. 创建一个新目录使用package.json安装我们的dependencies.

$ mkdir ~/demo && cd ~/demo
$ cp ~/project/package.json ~/demo
$ npm install
$ npm list
demo@1.0.0 /home/sitepoint/demo
├─┬ mkdirp@0.5.0
│ └── minimist@0.0.8
└── underscore@1.8.2

看看, 在另一个目录基于之前的package.json文件安装package很容易吧. 当我们安装新的package的时候, 怎样让他反映到package.json中去呢? 我们可以使用--save.

$ npm install request --save
$ npm list --depth=0
demo@1.0.0 /home/sitepoint/demo
├── mkdirp@0.5.0
├── request@2.53.0
└── underscore@1.8.2

package.json被更新了:

"dependencies": {
"mkdirp": "^0.5.0",
"request": "^2.53.0",
"underscore": "^1.8.2"
}

  

  

[译]A Beginner’s Guide to npm — the Node Package Manager的更多相关文章

  1. npm是什么NPM的全称是Node Package Manager

    npm是什么NPM的全称是Node Package Manager

  2. NPM (node package manager) 入门 - 基础使用

    什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...

  3. NPM(Node Package Manager,Node包管理器)

    简介 每个Node应用都有一个包含该应用元数据的文件-package.json,包含应用名.版本号以及依赖等信息. 我们使用NPM从NPM库下载并安装第三方包. 所有下载的包以及其依赖都保存在node ...

  4. npm和node的版本过低时的解决办法

    npm版本过低时的解决办法npm全名Node Package Manager 1.配置源的三种方法:1).npmrc文件的作用,就是配置npm源:使用淘宝源的方法就是在文件.npmrc中加入下面的语句 ...

  5. NPM一Node包管理和分发工具

    NPM 全称 Node Package Manager Node包管理和分发工具,可以把NPM理解为前端的Maven 我们通过npm可以很方便地下载js库,管理前端工程 最近版本的node.js已经集 ...

  6. NVM、NPM、Node.js的安装选择

    在安装和使用这三种工具时,我们有很多方式可以选择,这些方法各有优劣,每个人都有自己用起来比较习惯的配置,所以我在这里记录下自己比较习惯的一种安装方式与其他一些可能的选项. NVM.NPM.Node.j ...

  7. A Beginner's Guide to Paxos

    Google Drive: A Beginner's Guide to Paxos The code ideas of Paxos protocol: 1) Optimistic concurrenc ...

  8. Beginner's Guide to Python-新手指导

    Refer English Version: http://wiki.python.org/moin/BeginnersGuide New to programming? Python is free ...

  9. A Beginner's Guide To Understanding Convolutional Neural Networks(转)

    A Beginner's Guide To Understanding Convolutional Neural Networks Introduction Convolutional neural ...

随机推荐

  1. 洛谷P2246 SAC#1 - Hello World(升级版)

    题目背景 T1答案要mod1000000007(10^9+7),请重新提交,非常抱歉! 一天,智障的pipapi正在看某辣鸡讲义学程序设计. 题目描述 在讲义的某一面,他看见了一篇文章.这篇文章由英文 ...

  2. protected的使用注意

    在c#的可访问性级别中,public和private算是最容易理解的,相反protected往往令人非常头疼.经常在网上查资料的朋友往往会发现,答案几乎都是前篇一律,不是从msdn上拷贝的就是从别人的 ...

  3. c#自适应窗体的实现

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  4. iOS 解决一个因三方静态库冲突产生的duplicate symbol的问题

    最近在开发项目时编译三方.a时出现了冲突,原因是存在duplicate symbol. <1>模拟器编译时,应用的即时通讯模块采用的三方库(容联云),和视频监控模块采用的三方库(海康威视) ...

  5. 本地连接虚拟机上面的redis

    想做一个抓取系统,想到用redis存储临时数据可能会比较好些,就想着装个虚拟机,在虚拟机上面安装redis,通过本地来访问虚拟机上面的redis. 虚拟机和redis安装成功之后,发现本地怎么都连接不 ...

  6. Visual Studio 创建WebServer

    1.文件-->新建-->项目 2.Web-->Visual Studio 2012-->ASP.NET 空Web应用程序 3.右键项目-->添加-->新建项 4.选 ...

  7. django 提示ImportError: cannot import name json_response

    from json_response import JsonResponse, json_response as json_resp 使用的语句如上,其实并不是没有安装,只是需要升级一下 pip in ...

  8. Nginx系列2之Nginx+php

    preface 公司所有的大多数业务都泡在LNMP平台上,所以对PHP+Nginx有点了解,那么就做个小小的总结吧. what's FastCGi FastCGI是一个可伸缩,高速的在HTTP ser ...

  9. 今天接触枚举类型,感觉是C里面应该才有的东西

    遍历枚类型的方法: public static EActChannel getEnumByCode(int code) { for (EActChannel enm : EActChannel.val ...

  10. 才知道创建数据表的后面int(M)的m居然和存储大小没有关系

    之前一直以为,后面m代表有几个字节 MySQL 数据类型中的 integer types 有点奇怪.你可能会见到诸如:int(3).int(4).int(8) 之类的 int 数据类型.刚接触 MyS ...