原文: 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. Python 循环判断和数据类型

    循环和判断 1.if 形式 if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_ ...

  2. Pythonn new-style class and old-style class

    In [1]: class old(): ...: a = 1 ...: In [2]: o = old() In [3]: o.__class__ Out[3]: <class __main_ ...

  3. HTML5学习总结-11 IOS 控件WebView显示网页

    一 加载外部网页 1.使用UIWebView加载网页 运行XCode  新建一个Single View Application . 2 添加安全消息 添加以下消息到项目的  Info.plist &l ...

  4. Rabbitmq -Publish_Subscribe模式- python编码实现

    what is Exchanges ?? Let's quickly go over what we covered in the previous tutorials: A producer is ...

  5. 【原】javascript数组操作

    继续我的第二遍<javascript高级程序设计第三版>,今天要做的笔记是array 一.数组的操作 1.数组的创建: var colors= new Array(); //创建一个数组 ...

  6. 【原】javascript执行环境及作用域

    最近在重读<javascript高级程序设计3>,觉得应该写一些博客记录一下学习的一些知识,不然都忘光啦.今天要总结的是js执行环境和作用域. 首先来说一下执行环境 一.执行环境 书上概念 ...

  7. JavaWeb学习笔记——表达式语言

    使用表达式语言,可以方便地访问标志位(JSP中有page(pageContext).request.session和application4种标志位)中的属性内容,可以避免出现许多的Scriptlet ...

  8. Java——URLEncoder和URLDecoder

    import java.net.URLDecoder; import java.net.URLEncoder; //========================================== ...

  9. HDU 1326 Box of Bricks(水~平均高度求最少移动砖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1326 题目大意: 给n堵墙,每个墙的高度不同,求最少移动多少块转使得墙的的高度相同. 解题思路: 找到 ...

  10. 轻量级Image Library

    dlib http://sourceforge.net/projects/dclib/ stb https://github.com/nothings/stb