原文: 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. django写的留言板

    代码见 https://github.com/linux-wang/show-me-the-code/tree/master/dj_test 实际上是 https://github.com/linux ...

  2. Appium运行时,error: Logcat capture failed: spawn ENOENT的解决办法

    目前发现有以下两种可能: 一:查看环境变量是否配置成功. ANDROIDSDK D:\my_2_softwares\JAVA\adt-bundle-windows-x86-20140702\sdkPA ...

  3. “K米” 软件产品评测

    第一部分 调研,评测 评测: 第一次上手体验:KTV相信很多人都有去过,大部分包厢只有哦一个点歌台,相信很多人都会烦恼于一堆人挤在小小的点歌台前点歌的样子,还有些人不太好意思跑到点歌台点歌,常常是碰到 ...

  4. 第5.5次Scrum会议

    会议信息 时间:2016.10.25 21:30 时长:0.5h 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 会议内容 鉴于团队推进受阻,原PM 邓 与 原后端 冯 协商后决定之后一段时间 ...

  5. python增删改查(四)

    ###增删改查 names = ["zhangding","wangxu","wudong","cheng"] #增 n ...

  6. Java SimpleDateFormat使用

    SimpleDateFormat 是一个格式化日期的具体类. 它允许格式化 (date -> text) 和标准化. SimpleDateFormat 允许以为日期-时间格式化选择任何用户指定的 ...

  7. 使用canvas绘制时钟

    使用canvas绘制时钟  什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...

  8. 什么是linux的ftp

    vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序.特点是小巧轻快,安全易用.并且是一个完全免费开放源码的ftp软件ftp的作用: FTP(File Transfer Protocol, ...

  9. Jquery 基本知识(一)

    1. DOM对象:通过例如getElementById方法获取到DOM树中的元素就是DOM对象 jQuery对象:通过jQuery包装DOM对象后产生的对象 --- 注意:jQuery对象和DOM对象 ...

  10. MySQL缺失mysql_config文件

    打算爬虫,安装mysqldb 结果使用pip安装出错 在centos-6.4上pip install mysql-python,报错如下[sentry@kjtest111 mysql-python]$ ...