JSON

【译】一份关于npm的新手指南

字号+ 作者:H5之家 来源:H5之家 2017-08-04 08:02 我要评论( )

Node.js使得在服务器端使用JavaScript编写应用程序成为可能。它是基于V8Javascript运行时并且使用C++编写的,所以它的速度很快。最初,它旨在作为应用程序的服务

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 > .exit

Node.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)

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 标签:[ composer.json ] 列表

    标签:[ composer.json ] 列表

    2017-07-18 08:01

  • 关于JSON与JSONP简单总结

    关于JSON与JSONP简单总结

    2017-07-11 12:01

  • 有效选择七个关于 Java 的 JSON 开源类库

    有效选择七个关于 Java 的 JSON 开源类库

    2017-06-22 13:01

  • 求助关于restfull api接口几个问题

    求助关于restfull api接口几个问题

    2017-06-08 15:04

网友点评