本文转载自:众成翻译
译者:网络埋伏纪事
连接:http://www.zcfy.cc/article/1749
原文:https://blog.risingstack.com/node-hero-npm-tutorial/html
本章将学习什么是 NPM,以及如何使用它。咱们开始吧!node
NPM 是 Node.js 应用程序所用的包管理器 - 你能够在 NPM 中找到大量模块,这样你就不用从新造轮子了。它就像 Java 的 Maven 或者 PHP 的 Composer。与 NPM 交互有两种主要的接口 - NPM 网站以及 NPM 命令行工具。git
网站和 CLI 使用一样的注册库来显示模块以及查找模块。web
NPM 网站地址为 https://npmjs.com。你能够注册成一个新用户,或者只查找包。npm
要运行 CLI,只需执行:编程
npm
注意,NPM 是与 Node.js 二进制文件捆绑在一块儿的,因此没必要安装它 - 可是,若是想使用指定的 npm 版本,能够更新它。若是想安装 npm 第三版,那么就能够执行:npm install npm@3 -g
。json
在上一章 开始使用 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 脚本是一个很强大的概念 - 有了它们相助,就能够建立小的实用工具,甚至构成复杂的构建系统。
最多见的就是 start
和 test
脚本。用 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 实现异步编程的原理。