【Node Hero】2. 使用 NPM

本文转载自:众成翻译
译者:网络埋伏纪事
连接:http://www.zcfy.cc/article/1749
原文:https://blog.risingstack.com/node-hero-npm-tutorial/html

本章将学习什么是 NPM,以及如何使用它。咱们开始吧!node

NPM 概述

NPM 是 Node.js 应用程序所用的包管理器 - 你能够在 NPM 中找到大量模块,这样你就不用从新造轮子了。它就像 Java 的 Maven 或者 PHP 的 Composer。与 NPM 交互有两种主要的接口 - NPM 网站以及 NPM 命令行工具。git

网站和 CLI 使用一样的注册库来显示模块以及查找模块。web

NPM 网站

NPM 网站地址为 https://npmjs.com。你能够注册成一个新用户,或者只查找包。npm

npm website for Node Hero using npm tutorial

命令行界面

要运行 CLI,只需执行:编程

npm

注意,NPM 是与 Node.js 二进制文件捆绑在一块儿的,因此没必要安装它 - 可是,若是想使用指定的 npm 版本,能够更新它。若是想安装 npm 第三版,那么就能够执行:npm install npm@3 -gjson

使用 NPM

在上一章 开始使用 Node.js 中,当建立 package.json 文件时,已经遇到了 NPM。下面咱们继续扩展知识!api

添加依赖

本节将学习如何给应用程序添加运行时依赖。网络

有了 package.json 文件以后,就能够给应用程序添加依赖了。下面咱们先添加一个!试试下面的命令:异步

npm install lodash --save

用这一条命令,咱们作了两件事情:首先,lodash 被下载,并放到 node_modules 文件夹。全部外部依赖都会放在这个文件夹中。通常不会将这个文件夹添加到源代码管理,因此若是你在用 git,要确保将 lodash 添加到 .gitignore 文件中。

这对你的 .gitignore 是一个好起点。

# Logs
logs
*.log
npm-debug.log*

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules
jspm_packages

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history

如今咱们来看看 package.json 文件中有啥变化!文件中出现了一个新属性dependencies

"dependencies": {
  "lodash": "4.6.1"
}

这意味着 lodash 版本 4.6.1 如今安装好了,可使用了。注意,NPM 遵循 SemVer 规则来控制包的版本。

假设版本号格式为 “主版本号.次版本号.补丁版本号”,看成出不兼容的 API 修改时,增长主版本号;当以向后兼容的方式添加功能时,增长次版本号;看成出向后兼容的错误修正时,增长补丁版本号。更多信息参见:http://semver.org/

既然 lodash 已经能够用了,咱们来看看能怎么用!能够像你用本身的模块同样的方式用它,不过如今不须要定义路径,只须要模块的名称:

// index.js
const _ = require('lodash')

_.assign({ 'a': 1 }, { 'b': 2 }, { 'c': 3 });  
// → { 'a': 1, 'b': 2, 'c': 3 }

添加开发依赖

本节将学习如何把构建时依赖添加到应用中。

在建立 Web 应用程序时,可能须要压缩 JavaScript 文件,合并 CSS 文件等等。作这种事情的模块只会在资源构建期间运行,因此运行的应用程序不须要它们。

你能够像这样安装这些脚本:

npm install mocha --save-dev

以后,package.json 文件中会出现一个称为 devDependencies 的新小节。全部带有 --save-dev 安装的模块都会被放在这里 - 它们也会被放在同一 node_modules 目录中。

NPM 脚本

NPM 脚本是一个很强大的概念 - 有了它们相助,就能够建立小的实用工具,甚至构成复杂的构建系统。

最多见的就是 starttest 脚本。用 start 脚本能够定义别人如何启动你的应用程序,用 test 脚本定义如何运行测试。在 package.json 中,它们能够像这样:

"scripts": {
    "start": "node index.js",
    "test": "mocha test",
    "your-custom-script": "echo npm"
  }

这里要注意的事情:

  • start: 很简单,它只描述应用程序的起点,能够被 npm start 调用。

  • test: 用途是执行你的测试 - 这里有个陷阱,在本例中 mocha 不须要全局安装,由于 npm 会在 node_modules/.bin 文件夹下查找它,而 mocha 也会放在这里。它能够用 npm test 调用。

  • your-custom-script: 任何你想要的东西,你能够挑任何名称。它能够用 npm run your-custom-script 调用 - 不要忘记 run 部分!

做用域包/私有包

起初 NPM 对于模块名称有一个全局共享的命名空间 - 在注册库中有超过 250,000 个模块,大部分简单名称都已经被采用了。此外,全局命名空间只包含公共模块。

NPM 经过引入做用域包(Scoped Package)来解决此问题。做用域包有以下命名模式:

@myorg/mypackage

能够采用与之前同样的方式安装做用域包:

npm install @myorg/mypackage --save-dev

它会以以下方式出如今 package.json 中:

"dependencies": {
  "@myorg/mypackage": "^1.0.0"
}

不出所料,请求做用域包应该是以下方式:

require('@myorg/mypackage')

更多信息,请参考 NPM 做用域模块文档

下一步:异步编程

下一章学习使用回调和 Promises 实现异步编程的原理

图片描述

相关文章
相关标签/搜索