Node.js 让 JavaScript 编写服务器端应用程序成为可能。它建立在 JavaScript V8(C++ 编写的) 运行时之上,所以它很快。最初,它旨在为应用程序提供服务器环境,但是开发人员开始利用它来创建工具,帮助他们本地的任务自动化。此后,一个全新基于 Node 工具(如 Grunt 和 Gulp)的生态系统,使得前端开发改头换面。

要使用 Node.js 中的这些工具(或包),我们需要一种有效的方式来安装和管理它们。这就要用到node 包管理器: npm 了。它能够安装你想要的包,而且提供一个强大接口来使用它们。在使用 npm 之前,首先得在系统上安装 Node.js。

安装 Node.js

先去 Node.js 的下载页面,然后选择你需要的版本。有 Windows 和 Mac 版的安装程序可以用,还有预编译的 Linux 二进制文件和源代码。对于 Linux ,也可以用包管理器来安装 Node,下面将详细介绍。

这篇教程中使用的是 v.5.7.0 稳定版。

先看看 node 被安装到哪了,然后确认下版本。

$ which node

/usr/local/bin/node

$ node --version

v5.7.0

验证下安装是否成功,试试 Node REPL 。

$ 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.js 工作了,那么把注意力集中到 npm 上吧,安装 Node.js 过程中也安装了 npm 。

$ which npm

/usr/local/bin/npm

$ npm --version

3.6.0

Node 包模块

npm 有两种模式安装包,local(本地) 和 global(全球) 。在 local 模式下,它会安装 node_modules 文件夹(在工作目录的父目录)中的包。这个位置是属于当前用户的。Global 包安装在 root 用户下 {prefix}/lib/node_modules/ ({prefix} 通常是 /usr/ 或者 /usr/local)。这就意味需要使用 sudo 命令来安装 global 包,否则当解析第三方包依赖时,出于安全考虑可能会出现权限错误。 让我们来修改下:

看看 npm config 输出了些啥。

$ npm config list

; cli configs

user-agent = "npm/3.6.0 node/v5.7.0 linux x64"

; node bin location = /usr/local/bin/node

; cwd = /home/sitepoint

; HOME = /home/sitepoint

; 'npm config ls -l' to show all defaults.

输出了一些安装信息。现在获取当前 global 位置是很重要的。

$ npm config get prefix

/usr/local

这是我们想要改变的前缀,那样就能把 global 包安装到我们的 home 目录中。在你的 home 文件夹中创建一个新的目录。

$ cd && mkdir .node_modules_global

$ npm config set prefix=$HOME/.node_modules_global

简单的修改下配置,就把 Node global 包的安装位置改变了。这个操作也会在我们的 home 目录中生成一个 .npmrc 文件。

$ npm config get prefix

/home/sitepoint/.node_modules_global

$ cat .npmrc

prefix=/home/sitepoint/.node_modules_global

npm 安装位置仍然在 root 用户的目录中。但因为改变了 global 包的位置,所以可以利用这一点。我们需要重新安装 npm,但这次安装在新用户自备的位置。这次也是安装最新版本的 npm。

$ npm install npm --global

/home/sitepoint/.node_modules_global/bin/npm -> /home/sitepoint/.node_modules_global/lib/node_modules/npm/bin/npm-cli.js

/home/sitepoint/.node_modules_global/lib

└── npm@3.7.5

最后,需要将 .node_modules_global/bin 添加到环境变量 $PATH 中,这样就可以在命令行中运行 global 包命令。将下面这行命令追加到 .profile 或 .bash_profile 中,然后重启终端。

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

现在就会先发现 .node_modules_global/bin,然后使用正确版本的 npm。

$ which npm

/home/sitepoint/.node_modules_global/bin/npm

$ npm --version

3.7.5

Global 模式下安装包

目前只安装了一个 global 包,那就是 npm 本身。所以让我们来试试其他的,安装 UglifyJS(一个 JavaScript 压缩工具 )。我们将使用 –global 标识,可以简写成 -g。

$ npm install uglify-js --global

/home/sitepoint/.node_modules_global/lib

└─┬ uglify-js@2.6.2

├── async@0.2.10

├── source-map@0.5.3

├── uglify-to-browserify@1.0.2

└─┬ yargs@3.10.0

├── camelcase@1.2.1

├─┬ cliui@2.1.0

│ ├─┬ center-align@0.1.3

│ │ ├─┬ align-text@0.1.4

│ │ │ ├─┬ kind-of@3.0.2

│ │ │ │ └── is-buffer@1.1.2

│ │ │ ├── longest@1.0.1

│ │ │ └── repeat-string@1.5.4

│ │ └── lazy-cache@1.0.3

│ ├── right-align@0.1.3

│ └── wordwrap@0.0.2

├─┬ decamelize@1.1.2

│ └── escape-string-regexp@1.0.5

└── window-size@0.1.0

正如从输出中所看到的,额外的一些包也被安装了,这些都是 uglify.js 所依赖的其他包。

列出所有 global 包

可以用 npm list 命令列出所有我们安装的 global 包。

$ npm list --global

├─┬ npm@3.7.5

│ ├── abbrev@1.0.7

│ ├── ansi-regex@2.0.0

│ ├── ansicolors@0.3.2

│ ├── ansistyles@0.1.3

....................

└─┬ uglify-js@2.6.2

├── async@0.2.10

├── source-map@0.5.3

├── uglify-to-browserify@1.0.2

不过输出太冗长了。可以使用 –depth=0 参数来控制输出。

$ npm list -g --depth=0

├── npm@3.7.5

└── uglify-js@2.6.2

这就好多了,只输出安装的包和它们的版本号。

可以在终端中使用 uglifyjs 解析 JavaScript 文件。例如使用下面的命令可以将 example.js 转换成 example.min.js :

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

local 模式安装包

local 模式安装包去掉 –global 参数就行了。包将被安装在父级工作目录中一个 node_modules 文件夹里。在 home 目录中创建一个文件夹:

$ mkdir ~/project && cd ~/project

$ npm install underscore

/home/sitepoint/project

└── underscore@1.8.3

$ ls

node_modules

$ ls node_modules

underscore

列出所有 local 包

和 global 包一样,使用 npm list 命令就能列出所有 local 包。

$ npm list

/home/sitepoint/project

└── underscore@1.8.3

正如你所见,我们可以把 local 包安装在任何我们想安装的位置。这就意味着可以创建另外一个目录然后安装一个不同版本的 underscore。

卸载 local 包

npm 是一个包管理器,所以它肯定也可以卸载一个包。让我们假设当前版本的 underscore 包存在兼容问题。移除当前的包然后安装一个老版本的,像这样:

$ npm uninstall underscore

- underscore@1.8.3 node_modules/underscore

$ npm list

/home/sitepoint/project

└── (empty)

安装一个指定版本的包

现在可以安装我们想要的版本的 underscore 包。@ 后面追加版本号就可以了。

$ npm install underscore@1.8.2

/home/sitepoint/project

└── underscore@1.8.2

$ npm list

/home/sitepoint/project

└── underscore@1.8.2

更新包

最新版本的 underscore 修复了一些之前的 bug ,然后我们想要更新包到最新版本。

$ npm update underscore

underscore@1.8.3 node_modules/underscore

$ npm list

/home/sitepoint/project

└── underscore@1.8.3

注意:对于这项操作,underscore 已经在 package.json 中已经被当成依赖列出来了(看看如何管理依赖)。

搜索包

在本教程中多次使用 mkdir 命令。是否有一个 node 包 来做这件事情呢?

$ npm search mkdir

npm WARN Building the local index for the first time, please be patient

有个 mkdirp。安装它。

$ npm install mkdirp

/home/sitepoint/project

└─┬ mkdirp@0.5.1

└── minimist@0.0.8

现在创建一个 mkdir.js 文件。

var mkdirp = require('mkdirp');

mkdirp('foo', function (err) {

if (err) console.error(err)

else console.log('Directory created!')

});

然后在终端中运行它:

$ node. mkdir.js

Directory created!

管理缓存

当 npm 安装一个包的时候它会维护一个副本,下次你想再次安装那个包的时候,就不用再去访问网络重新下载了。那些副本会在 home 目录 .npm 文件夹中缓存起来。

$ ls ~/.npm

_locks  minimist  mkdirp  registry.npmjs.org  underscore

随着时间推移,这个目录里会有很多老的包,十分的混乱,所以时常清理下是十分有必要的。

$ npm cache clean

管理依赖

目前在我们的项目目录中只安装了两个包,不过包的数量会增长的非常快。手动安装依赖是非常不明智的,所以可以在项目目录中用 package.json 文件来管理它们。通过 nmp init 命令可以创建。

$ 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: (index.js)

test command:

git repository:

keywords:

author: Sitepoint

license: (ISC)

这会在项目根目录中创建下面的文件

{

"name": "demo",

"version": "1.0.0",

"description": "Demo package.json",

"main": "main.js",

"dependencies": {

"mkdirp": "^0.5.1",

"underscore": "^1.8.3"

},

"devDependencies": {},

"scripts": {

"test": "echo "Error: no test specified" && exit 1"

},

"author": "Sitepoint",

"license": "ISC"

}

如果你想快速生成一个 package.json 文件的话,使用下面的命令:

$ npm init --yes

会快速创建一个 package.json 文件,你的目录名会被作为 name 属性。

还可以添加参数 private: true 防止私有库不小心被发布,还能消除运行 npm 安装时的各种警告。让我们创建一个新的目录,使用 package.json 文件来安装依赖。

$ mkdir ~/demo && cd ~/demo

$ cp ~/project/package.json ~/demo

$ npm install

$ npm list

demo@1.0.0 /home/sitepoint/demo

├─┬ mkdirp@0.5.1

│ └── minimist@0.0.8

└── underscore@1.8.3

看看基于 package.json 文件在另外一个目录中安装包是多么的简单。但是当安装新包的时候如何让它保持最新呢?我们可以使用 –save 标识。

$ npm install request --save

$ npm list --depth=0

demo@1.0.0 /home/sitepoint/demo

├── mkdirp@0.5.1

├── request@2.53.0

└── underscore@1.8.3

然后 package.json 也就被更新了。

"dependencies": {

"mkdirp": "^0.5.1",

"request": "^2.53.0",

"underscore": "^1.8.3"

}

版本管理

有些工具可以帮你在同一台机器上管理不同版本的 Node.js。有个叫 n 的工具。还有个是 nvm(Node Version Manager)。如果你对这些有兴趣的话,不妨看看我们另外一篇教程: 使用 nvm 安装多版本 Node.js。

总结

在这篇教程中,讲解了使用 npm 工作的基本知识。展示了如何从项目下载页面安装 Node.js,如何修改 global 包的位置(避免使用 sudo 命令),还有如何在 local 、 global 模式下安装包。以及删除、更新、安装指定版本的包,最后还有管理项目依赖。

你会在项目中使用 npm 吗?在 npm 仓库有数以千计的包,随着 jQuery 插件也能快速在 npm 仓库发布,包的数量肯定会保持增长。

npm 初学者教程的更多相关文章

  1. Go GraphQL初学者教程

    Go GraphQL初学者教程 https://tutorialedge.net/golang/go-graphql-beginners-tutorial/ https://tutorialedge. ...

  2. 《SLAM for Dummies》中文版《SLAM初学者教程》

    SLAM for Dummies  SLAM初学者教程A Tutorial Approach to Simultaneous Localization and Mapping  一本关于实时定位及绘图 ...

  3. SLAM for Dummies SLAM初学者教程 中文翻译 1到4章

    SLAM for Dummies  SLAM初学者教程A Tutorial Approach to Simultaneous Localization and Mapping  一本关于实时定位及绘图 ...

  4. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  5. PANDAS 数据分析初学者教程

    Pandas 初学者教程       2018-05-19 六尺巷人 对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常重要的Python包.它不仅提供了很多方法,使得数据处理非常 ...

  6. 【强烈推荐,超详细,实操零失误】node.js安装 + npm安装教程 + Vue开发环境搭建

    node.js安装 + npm安装教程 + Vue开发环境搭建 [强烈推荐,超详细,实操零失误] 原博客园地址:https://www.cnblogs.com/goldlong/p/8027997.h ...

  7. Github初学者教程(一)

    如果你是一名程序员,或者是相关专业的学生,那么Github你不应不知道.很多开源组织和大神,会选择在Github这个平台上,发布他们的开源项目,学会使用Github将能够给你的学习和工作带来巨大帮助! ...

  8. npm命令教程

    教程:http://www.runoob.com/nodejs/nodejs-npm.html 常用命令:http://www.cnblogs.com/PeunZhang/p/5553574.html

  9. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

随机推荐

  1. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法

    在 IOS 开发当中经常碰到 whose view is not in the window hierarchy 的错误,该错误简单的说,是由于 "ViewController" ...

  2. lua解析脚本过程中的关键数据结构介绍

    在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...

  3. 《JS设计模式笔记》 2,简单工厂模式

    <script type="text/javascript"> //简单工厂模式 //定义:由一个方法来决定到底要创建哪个类的实例,而这些实例经常拥有相同的接口.其实例 ...

  4. MVC4做网站后台:栏目管理2、修改栏目

    接上节添加栏目. 修改栏目与添加栏目非常相似,主要区别在于先向视图传递要修改栏目的model.另外在保存时比添加栏目验证要更多一些. 1.要验证父栏目不能是其本身: 2.父栏目不能是其子栏目: 3.父 ...

  5. Javaweb中解决跨越问题的拦截器代码

    public class AccessControlFilter implements Filter { @Override public void init(FilterConfig filterC ...

  6. BAT及各大互联网公司2014前端笔试面试题--JavaScript篇

    很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习js更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确, ...

  7. 拨乱反正:DDD 回归具体的业务场景,Domain Model 再再重新设计

    首先,把最真挚的情感送与梅西,加油! 写在前面 阅读目录: 重申业务场景 Domain Model 设计 后记 上一篇<设计窘境:来自 Repository 的一丝线索,Domain Model ...

  8. iOS chart 图表完美解决方案 基于swift

    如果打算在app中使用图标功能,这个框架基本能够满足90%的需求 下边是作者的框架的下载地址 ,基于swift2.0 https://github.com/danielgindi/ios-charts ...

  9. 【类库】私房干货.Net数据层方法的封装

    [类库]私房干货.Net数据层方法的封装 作者:白宁超 时间:2016年3月5日22:51:47 摘要:继上篇<Oracle手边常用70则脚本知识汇总>文章的发表,引起很多朋友关注.便促使 ...

  10. 相克军_Oracle体系_随堂笔记009-检查点队列

    1.检查点队列 checkpoint queue RBA 日志块地址 redo block address LRBA 第一次被脏的地址 HRBA 最近一次被脏的地址 on disk rba 重做日志( ...