[译]A Beginner’s Guide to npm — the Node Package Manager
原文: 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的更多相关文章
- npm是什么NPM的全称是Node Package Manager
npm是什么NPM的全称是Node Package Manager
- NPM (node package manager) 入门 - 基础使用
什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...
- NPM(Node Package Manager,Node包管理器)
简介 每个Node应用都有一个包含该应用元数据的文件-package.json,包含应用名.版本号以及依赖等信息. 我们使用NPM从NPM库下载并安装第三方包. 所有下载的包以及其依赖都保存在node ...
- npm和node的版本过低时的解决办法
npm版本过低时的解决办法npm全名Node Package Manager 1.配置源的三种方法:1).npmrc文件的作用,就是配置npm源:使用淘宝源的方法就是在文件.npmrc中加入下面的语句 ...
- NPM一Node包管理和分发工具
NPM 全称 Node Package Manager Node包管理和分发工具,可以把NPM理解为前端的Maven 我们通过npm可以很方便地下载js库,管理前端工程 最近版本的node.js已经集 ...
- NVM、NPM、Node.js的安装选择
在安装和使用这三种工具时,我们有很多方式可以选择,这些方法各有优劣,每个人都有自己用起来比较习惯的配置,所以我在这里记录下自己比较习惯的一种安装方式与其他一些可能的选项. NVM.NPM.Node.j ...
- A Beginner's Guide to Paxos
Google Drive: A Beginner's Guide to Paxos The code ideas of Paxos protocol: 1) Optimistic concurrenc ...
- Beginner's Guide to Python-新手指导
Refer English Version: http://wiki.python.org/moin/BeginnersGuide New to programming? Python is free ...
- A Beginner's Guide To Understanding Convolutional Neural Networks(转)
A Beginner's Guide To Understanding Convolutional Neural Networks Introduction Convolutional neural ...
随机推荐
- vs2010 mvc3安装时报错
今天在研究以往的商城项目时,由于前台使用的是MVC3,在没有安装MVC3的插件时,提示未能加载项目,但是在安装过程中,又提示安装失败: 决定折腾一下->居然找到一篇以前别人写的神作,特此记录一下 ...
- Bzoj2683 简单题
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
- UOJ #149 [NOIP 2015] 子串
传送门 Solution DP+滚动数组. DP状态 \(dp[i][j][k]\): \(A\)的第\(i\)个字符和\(B\)的第\(j\)个字符匹配且该字符在第\(k\)个子串中的方案数. 转移 ...
- ASP.NET MVC4 执行流程
MVC在底层和传统的asp.net是一致的,在底层之上,相关流程如下: 1)Global.asax里,MvcApplication对象的Application_Start()事件中,调用 RouteC ...
- String 与StringBuffer的区别与使用
摘自:http://www.cnblogs.com/kaituorensheng/p/3776484.html 区别: String类是字符串常量,是不可更改的常量.而StringBuffer是字符串 ...
- 屠蛟之路_你的名字_FirstDay
君の名は. "号外,号外!屠龙天团众志成城,惊天技杀alpha龙!号外,号外--" 苦战十日,屠龙少年们依仗最后的惊天技终于将邪恶的alpha怪龙斩杀.但是对屠龙少年而言,这是一场 ...
- JavaWeb学习总结-07 Filter 学习和使用
一 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- Vijos1921严厉的班长
传送门 在贴吧上看到了这道题,恰好最近在学相关的东西,觉得比较有意思就去做了. 第一眼看上去比较像搜索,其实是道状压DP.我简单讲一下思路: 首先明确,不管之前取了什么数,取1必定满足所有的数之间互质 ...
- windows命令关机
不知道为啥,远程连接的window服务器没有关机命令,感觉是不是管理员权限导致的,所以找了下用命令关机,如下 shutdown -s -t #5秒内关机 shutdown -r -t #5秒内重启
- ecshop后台【订单管理】
1.订单列表页,在‘确认’,‘无效’,’取消‘....增加一个选项’导出exl表格‘ a.增加html代码,order_list.htm <input name="print" ...