本文转载自:众成翻译
译者:网络埋伏纪事
链接:http://www.zcfy.cc/article/1749
原文:https://blog.risingstack.com/node-hero-npm-tutorial/
本章将学习什么是 NPM,以及如何使用它。我们开始吧!
NPM 概述
NPM 是 Node.js 应用程序所用的包管理器 - 你可以在 NPM 中找到大量模块,这样你就不用重新造轮子了。它就像 Java 的 Maven 或者 PHP 的 Composer。与 NPM 交互有两种主要的接口 - NPM 网站以及 NPM 命令行工具。
网站和 CLI 使用同样的注册库来显示模块以及查找模块。
NPM 网站
NPM 网站地址为 https://npmjs.com。你可以注册成一个新用户,或者只查找包。
命令行界面
要运行 CLI,只需执行:
npm
注意,NPM 是与 Node.js 二进制文件捆绑在一起的,所以不必安装它 - 但是,如果想使用指定的 npm 版本,可以更新它。如果想安装 npm 第三版,那么就可以执行:npm install npm@3 -g
。
使用 NPM
在上一章 开始使用 Node.js 中,当创建 package.json
文件时,已经遇到了 NPM。下面我们继续扩展知识!
添加依赖
本节将学习如何给应用程序添加运行时依赖。
有了 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 脚本是一个很强大的概念 - 有了它们相助,就可以创建小的实用工具,甚至构成复杂的构建系统。
最常见的就是 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 作用域模块文档。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。