Node.js使得在服务器端使用JavaScript编写应用程序成为可能。它是基于V8Javascript运行时并且使用C++编写的,所以它的速度很快。最初,它旨在作为应用程序的服务器环境,但是开发人员使用它创建工具来帮助他们进行本地任务自动化。从那时起,一个全新的基于Node的工具生态系统(如Grunt,Gulp和Webpack)彻底改变了前端开发的面貌。
为了在Node.js中使用这些工具(或者包),我们需要能够以有效的方式安装和管理它们。这就是我们即将要讨论的:npm--Node的包管理器。它负责安装你需要使用的包,并且提供一个有用的界面让你与它们交互。
在本文中,我将介绍使用npm的基础知识。我将向你演示如何在本地和全局模式下安装包,以及删除,更新和安装某个版本的包。我还会告诉你如何使用package.json处理项目的依赖。如果你更喜欢看视频,请注册SitePoint Premium观看我们的免费录屏:什么是npm以及如何使用?。
在开始使用npm之前,首先需要在电脑中安装Node.js。
安装Node.js去Node.js 下载页面获取你需要的版本。可以获得Windows和Mac环境的安装包和预编译的Linux二进制文件以及源代码。对于Linux环境,你还可以通过包管理器来安装Node,如这里所述。
本教程我们将使用v6.10.3稳定版本。在编写本文时,。
提示: 你也可以考虑使用版本管理器来安装Node。这将消除下面提出的权限问题。
我们来看一下Node的安装位置以及版本。
$ which node /usr/bin/node $ node --version v6.10.3使用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 > .exitNode.js已经安装成功,现在我们可以把注意力集中在npm上,npm已经集成在上述安装的Node.js中。
$ which npm /usr/bin/npm $ npm --version 3.10.10 Node包模块npm可以以本地或全局模式安装包。在本地模式下,将包安装在父工作目录中的node_modules文件夹中。该位置由当前用户所拥有。安装在{prefix}/lib/node_modules/中的全局包由根目录所拥有({prefix}通常是/usr/或 /usr/local)。这意味着你将不得不使用sudo全局安装包,这可能会在解决第三方依赖时导致权限错误,也可能导致安全问题。下面让我们更改一下:
更改全局包的位置让我们看看运行npm config list输出了什么:
$ npm config list ; cli configs user-agent = "npm/3.10.10 node/v6.10.3 linux x64" ; userconfig /home/sitepoint/.npmrc prefix = "/home/sitepoint/.node_modules_global" ; node bin location = /usr/bin/nodejs ; cwd = /home/sitepoint ; HOME = /home/sitepoint ; "npm config ls -l" to show all defaults.输出给了我们有关npm的安装信息。现在,重要的是获取当前的全局位置。
$ npm config get prefix /usr为了在主目录中安装全局包,我们需要更改这个前缀。为此,你可以在主文件夹中创建一个新目录。
$ cd ~ && mkdir .node_modules_global $ npm config set prefix=$HOME/.node_modules_global通过这个简单的配置更改,我们将位置更改为全局Node包安装的位置。这个更改同时会在我们的主目录中创建了一个.npmrc文件。
$ npm config get prefix /home/sitepoint/.node_modules_global $ cat .npmrc prefix=/home/sitepoint/.node_modules_global我们仍然将npm安装在由根目录所有的位置。但是要注意我们已经在配置中改变了全局包安装的位置。我们需要再次安装npm,但是这一次是安装在新用户所在的位置。当然,安装的将是npm的最新版本。
$ npm install npm --global └─┬ npm@5.0.2 ├── abbrev@1.1.0 ├── ansi-regex@2.1.1 .... ├── wrappy@1.0.2 └── write-file-atomic@2.1.0最后,我们需要添加.node_modules_global/bin到$PATH环境变量中,以便可以从命令行运行全局包。为了做到这一点,你可以把下面这一行添加到.profile,.bash_profile或者.bashrc文件中并重新启动终端。
export PATH="$HOME/.node_modules_global/bin:$PATH"现在我们可以找到npm的所在目录.node_modules_global/bin并且使用合适的npm版本。
$ which npm /home/sitepoint/.node_modules_global/bin/npm $ npm --version 5.0.2 在全局模式下安装包目前我们只有一个安装在全局的包-那就是npm包本身。下面我们来安装UglifyJS包(一个JavaScript的压缩工具)。我们使用--global标记,也可以缩写为-g。
$ npm install uglify-js --global /home/sitepoint/.node_modules_global/bin/uglifyjs -> /home/sitepoint/.node_modules_global/lib/node_modules/uglify-js/bin/uglifyjs + uglify-js@3.0.15 added 4 packages in 5.836s从输出可以看出,还安装了其他包, 这些包都是UglifyJS包的依赖项。
列出全局安装包我们可以使用npm list命令列出全局包。
$ npm list --global home/sitepoint/.node_modules_global/lib ├─┬ npm@5.0.2 │ ├── abbrev@1.1.0 │ ├── ansi-regex@2.1.1 │ ├── ansicolors@0.3.2 │ ├── ansistyles@0.1.3 .................... └─┬ uglify-js@3.0.15 ├─┬ commander@2.9.0 │ └── graceful-readlink@1.0.1 └── source-map@0.5.6然而,输出十分冗长。我们可以使用--depth=0选项进行优化。
$ npm list -g --depth=0 /home/sitepoint/.node_modules_global/lib ├── npm@5.0.2 └── uglify-js@3.0.15我们发现这要更友好 -- 只显示我们安装的包及其版本号。
我们可以在命令行中使用任何全局安装包。例如:下面的命令展现了如何使用Uglify 包将example.js压缩到example.min.js:
$ uglifyjs example.js -o example.min.js 在本地模式下安装包当你在本地安装包时,通常会使用package.json文件进行安装。下面让我们创建这样的一个文件。
$ npm init package name: (project) version: (1.0.0) description: Demo of package.json entry point: (index.js) test command: git repository: keywords: author: license: (ISC)