aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/learn/server-side/express_nodejs/development_environment/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/learn/server-side/express_nodejs/development_environment/index.html')
-rw-r--r--files/zh-cn/learn/server-side/express_nodejs/development_environment/index.html390
1 files changed, 390 insertions, 0 deletions
diff --git a/files/zh-cn/learn/server-side/express_nodejs/development_environment/index.html b/files/zh-cn/learn/server-side/express_nodejs/development_environment/index.html
new file mode 100644
index 0000000000..9a5e9ac7de
--- /dev/null
+++ b/files/zh-cn/learn/server-side/express_nodejs/development_environment/index.html
@@ -0,0 +1,390 @@
+---
+title: 设置 Node 开发环境
+slug: learn/Server-side/Express_Nodejs/development_environment
+tags:
+ - Express
+ - Node
+ - node.js
+ - npm
+ - 初学者
+ - 学习
+ - 开发环境
+ - 服务器端
+translation_of: Learn/Server-side/Express_Nodejs/development_environment
+---
+<div>{{LearnSidebar}}</div>
+
+<div>{{PreviousMenuNext("Learn/Server-side/Express_Nodejs/Introduction", "Learn/Server-side/Express_Nodejs/Tutorial_local_library_website", "Learn/Server-side/Express_Nodejs")}}</div>
+
+<p class="summary">你已经了解了 Express 的用途,接下来将在 Windows、Linux(Ubuntu)和 Mac OS X 下搭建 Node/Express 开发环境。本节将介绍主流操作系统下开发 Express 程序的必备知识。</p>
+
+<table class="learn-box standard-table">
+ <tbody>
+ <tr>
+ <th scope="row">预备知识:</th>
+ <td>会打开终端 / 命令行。会为开发用操作系统安装软件包。</td>
+ </tr>
+ <tr>
+ <th scope="row">学习目标:</th>
+ <td>在电脑上搭建 Express 开发环境。</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Express_开发环境概述">Express 开发环境概述</h2>
+
+<p>使用 Node 和 Express 搭建 web 应用程序开发环境非常简便。这一章节将简述所需的工具,在主流操作系统(Ubuntu、macOS 和 Windows)上安装 Node 的步骤,以及测试安装是否成功的方法。</p>
+
+<h3 id="什么是_Express_开发环境?">什么是 Express 开发环境?</h3>
+
+<p>完整的 Express 本地开发环境包括 Nodejs、NPM 包管理器和 <strong>Express 应用生成器</strong>(可选)。</p>
+
+<p>Node 和 NPM 包管理器可以用二进制包、安装程序或系统包管理器一并安装(下文将介绍)。然后在开发每个 Express web 应用时,由 NPM 针对当前应用将 Express(以及模板引擎、数据库驱动程序、身份验证中间件、静态文件托管中间件等其它库)作为依赖项进行安装。</p>
+
+<p>NPM 也可以安装(全局的)<strong>Express 应用生成器</strong>,可用于创建遵循 <a href="/zh-CN/docs/Web/Apps/Fundamentals/Modern_web_app_architecture/MVC_architecture">MVC模式</a> 的 Express 应用框架。它不是必备的,因为无需这个工具就可以创建 Express 应用(或相同架构布局或依赖的 Express 应用)。但我们还是会使用它,因为它更容易上手,还有助于应用结构的模块化管理。</p>
+
+<div class="note">
+<p><strong>注:</strong> 与某些其他Web框架不同,开发环境不包含单独的开发Web服务器。在Node / Express中,Web应用程序将创建并运行自己的Web服务器!</p>
+</div>
+
+<p>典型的开发环境中还需要一些外围工具,包括用于编写代码的 <a href="zh-CN/docs/Learn/Common_questions/实用文本编辑器">文本编辑器</a> 或 IDE ,用于代码控制管理的工具(比如代码版本控制工具 <a href="https://git-scm.com/">Git</a>)。这里假定你已经安装了这些工具(尤其是文本编辑器)。</p>
+
+<h3 id="支持哪些操作系统?">支持哪些操作系统?</h3>
+
+<p>Node 可以在 Windows、macOS、Linux 的诸多发行版本或 Docker 等环境运行(完整列表见 Node <a href="https://nodejs.org/zh-cn/download/">下载页面</a>)。几乎所有的个人电脑都具备 Node 开发所需性能。Express 运行在 Node 环境中,因此可运行 Node 的平台均可运行 Express。</p>
+
+<p>本文将介绍 Windows、macOS 和 Ubuntu Linux 上的安装步骤。</p>
+
+<h3 id="应该选择_NodeExpress_的哪个版本?">应该选择 Node/Express 的哪个版本?</h3>
+
+<p>Node 有许多 <a href="https://nodejs.org/zh-cn/blog/release/">发行版本</a>,新版包含 bug 修复、对最新版本 ECMAScript 标准的支持,以及 API 的改进。</p>
+
+<p>通常应该选择最新的 LTS(Long-term supported,长期支持版)发行版,因为它比当前发布版(current)更稳定。当前发布版包含最新的特性(维护中),如果需要 LTS 版本中没有提供的特征,那么可以选择它。</p>
+
+<p>Express 应选用最新版本。</p>
+
+<h3 id="数据库和其它依赖该如何选择?">数据库和其它依赖该如何选择?</h3>
+
+<p>其它依赖(例如数据库驱动程序、模板引擎、身份认证引擎等)是应用的一部分,使用 NPM 将它们引入到应用环境中。稍后进行讨论。</p>
+
+<h2 id="安装_Node">安装 Node</h2>
+
+<p>先在操作系统上安装 Node.js 和 NPM 后才可使用 Express。接下来将介绍如何最简便地在 Ubuntu 18.04、macOS Mojave 以及 Windows 10 上安装 Node.js 最新的 LTS 版本。.</p>
+
+<div class="note">
+<p><strong>提示:</strong>以下内容将介绍在上述三种 OS 上安装 Node 和 NPM 的最简便方法。对于其它操作系统,以及更多的安装方法,可以参考 <a href="https://nodejs.org/zh-cn/download/package-manager/">通过包管理器方式安装 Node.js</a> (nodejs.org).</p>
+</div>
+
+<h3 id="Windows_和_macOS">Windows 和 macOS</h3>
+
+<p>在 Windows 和 macOS 上安装 Node 和 NPM 非常简单明了,使用现成的安装包就行了:</p>
+
+<ol>
+ <li>下载安装包:
+ <ol>
+ <li>访问 <a href="https://nodejs.org/zh-cn/">https://nodejs.org/zh-cn/</a></li>
+ <li>左侧按钮上写着“推荐多数用户使用(LTS)”,点击下载。</li>
+ </ol>
+ </li>
+ <li>双击下载的安装包,按照提示即可安装。</li>
+</ol>
+
+<h3 id="Ubuntu_18.04">Ubuntu 18.04</h3>
+
+<p>安装 Node 最新的 LTS 版本的最简便方法就是使用 <a href="https://nodejs.org/zh-cn/download/package-manager/#debian-and-ubuntu-based-linux-distributions-enterprise-linux-fedora-and-snap-packages">包管理器</a>,可以直接从 Ubuntu 二进制发行仓库中下载。通过在终端运行以下两行简单的命令就可以做到:</p>
+
+<pre class="brush: bash"><code>curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
+sudo apt-get install -y nodejs</code>
+</pre>
+
+<div class="warning">
+<p><strong>警告:</strong>直接从 Ubuntu 默认仓库中下载的 Node 是 8.x 版本的。</p>
+</div>
+
+<ol>
+</ol>
+
+<h3 id="测试_Node.js_和_NPM_是否安装成功">测试 Node.js 和 NPM 是否安装成功</h3>
+
+<p>检查 Node 是否成功安装的最简单方法就是在终端(或命令行)中运行 "<code>version</code>" 命令,看是否返回版本号字符串:</p>
+
+<pre class="brush: bash">$ node -v
+v10.15.0</pre>
+
+<p>NPM 应该与 Node.js 一同成功安装,可以使用同样的方法来测试一下:</p>
+
+<pre class="brush: bash">$ npm -v
+6.7.0</pre>
+
+<p>下面的测试也许会带来小小激动:创建一个非常基础的“纯 Node”服务器,在浏览器中访问正确的 URL 地址时将直接打印 "Hello world":</p>
+
+<ol>
+ <li>以下代码使用了纯 Node 的特性(与 Express 无关)和一些 ES6 的语法,把它复制到 <strong>hellonode.js</strong> 文件中:
+
+ <pre class="brush: js">// 加载 HTTP 模块
+const http = require("http");
+const hostname = '127.0.0.1';
+const port = 3000;
+
+// 创建 HTTP 服务器
+const server = http.createServer((req, res) =&gt; {
+
+ // 用 HTTP 状态码和内容类型(Content-Type)设置 HTTP 响应头
+ res.statusCode = 200;
+ res.setHeader('Content-Type', 'text/plain');
+
+ // 发送响应体
+ res.end('Hello World\n');
+});
+
+// 监听 3000 端口的请求,注册一个回调函数记录监听开始
+server.listen(port, hostname, () =&gt; {
+ console.log(`服务器运行于 http://${hostname}:${port}/`);
+});
+</pre>
+
+ <p>代码导入了 <code>"http"</code> 模块,并用它(<code>createServer()</code>)创建了一个服务器来监听 3000 端口的 HTTP 请求。随后在控制台打印一条信息,提示测试服务器的正确 URL。<code>createServer()</code> 函数接受一个回调函数作为参数,并在接收 HTTP 请求后进行回调。直接返回了 HTTP 状态码 200 ("<code>OK</code>"),以及纯文本信息 "Hello World"。</p>
+
+ <div class="note">
+ <p><strong>注:</strong>现在看不懂这些代码请不要担心,开始使用 Express 后候会进行更加详细的解释。</p>
+ </div>
+ </li>
+ <li>在命令行工具中进入 hellonode.js 文件所在的目录,输入“node + 文件名”并运行,服务器就启动了:
+ <pre class="brush: bash">$ node hellonode.js
+服务器运行于 http://127.0.0.1:3000/
+</pre>
+ </li>
+ <li>在浏览器中访问这个 URL(<a href="http://127.0.0.1:8000/">http://127.0.0.1:3000/</a>),如果一切正常,浏览器会直接显示出 "Hello world" 字符串。</li>
+</ol>
+
+<h2 id="使用_NPM">使用 NPM</h2>
+
+<p>构建 Node 应用过程中,<a href="https://docs.npmjs.com/">NPM</a> 是除了 Node 本身之外最重要的工具。可用于获取应用开发、测试以及生产所需的所有包(JavaScript 库)。也可运行开发过程中使用的测试单元和工具。</p>
+
+<div class="note">
+<p><strong>注:</strong>以 Node 的角度来看,Express 只是一个用 NPM 安装、供人使用的包而已。</p>
+</div>
+
+<p>可以用 NPM 手动逐个安装所需包。但通常可用 <a href="https://docs.npmjs.com/files/package.json">package.json</a> 文件来管理依赖。把每个<font><font>依赖以一个</font></font> JavaScript “包”的形式(其中<font><font>包括名称、版本、描述,初始执行文件、生产依赖,开发依赖、支持的 </font></font><em><font><font>Node </font></font></em><font><font>版本,等等</font></font>)罗<font><font>列在这个文件中。package.json 文件包含 NPM 获取和运行应用程序所需的所有内容(在编写可重用的库时,可以用它把包上传到 NPM 仓库中供其他用户使用)。</font></font></p>
+
+<h3 id="添加依赖项">添加依赖项</h3>
+
+<p>下面介绍用 NPM 下载包、将包保存进工程依赖树,以及在 Node 应用中调用包的方法和步骤。</p>
+
+<div class="note">
+<p><strong>注:</strong>现在来讲解获取和安装 Express 包的步骤。稍后解释为什么可以直接对 Express 包(乃至其它包)使用 <strong>Express 应用生成器</strong>。这段对理解 NPM 的工作原理和应用生成器的工作机制有一定的帮助。</p>
+</div>
+
+<ol>
+ <li>首先为新应用创建一个目录,并进入它:
+ <pre class="brush: bash">$ mkdir myapp
+$ cd myapp</pre>
+ </li>
+ <li>然后,使用 NPM 的 init 命令为应用创建一个 <strong>package.json</strong> 文件。这个命令将请求一系列的信息,包括应用的名称和版本,程序初始进入点的文件名(默认为 <strong>index.js</strong>)。现在先接受默认信息即可:
+ <pre class="brush: bash">$ npm init</pre>
+
+ <p><strong>package.json</strong> 文件中保存了所接受的默认信息,最后一条是许可证信息:</p>
+
+ <pre class="brush: json">{
+ "name": "myapp",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
+</pre>
+ </li>
+ <li>接下来在 <strong>myapp</strong> 目录中安装 Express,用下面的命令将 Express 保存在 <strong>package.json</strong> 文件中的依赖表里:
+ <pre class="brush: bash">$ npm install express</pre>
+
+ <p>此时 <strong>package.json</strong> 文件的底部会出现依赖列表("dependencies"),其中包含 Express:</p>
+
+ <pre class="brush: json">{
+ "name": "myapp",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+<strong> "dependencies": {
+ "express": "^4.16.4"
+ }</strong>
+}
+</pre>
+ </li>
+ <li>可以调用 <code>require()</code> 函数来使用库:
+ <pre><code><strong>const express = require('express');
+</strong>const app = express();
+
+app.get('/', (req, res) =&gt; {
+ res.send('Hello World!')
+});
+
+app.listen(8000, () =&gt; {
+ console.log('示例程序正在监听 8000 端口!')
+});</code>
+</pre>
+
+ <p>以上代码展示了一个最简单的 "HelloWorld" Express 应用。它导入了 "express" 模块并用它创建了一个服务器(app)来监听 8000 端口,并且在控制台打印了一条信息以提示测试服务器的正确 URL。<code>app.get()</code> 函数只响应对特定路径(<code>'/'</code>)的 HTTP <code>GET</code> 请求,此处的响应就是发送 "Hello World!"。<br>
+ <br>
+ 在 myapp 应用的根目录下新建一个 <strong>index.js</strong> 文件,将上述代码粘贴进来并保存。</p>
+ </li>
+ <li>在命令行输入 node + 文件名 即可启动服务器:
+ <pre class="brush: bash">$ node index.js
+<code>示例程序正在监听 8000 端口!</code>
+</pre>
+ </li>
+ <li>在浏览器中访问这个 URL(<a href="http://127.0.0.1:8000/">http://127.0.0.1:8000/</a>),如果一切正常,浏览器会直接显示出 "Hello world!" 字符串。</li>
+</ol>
+
+<h3 id="开发依赖(Development_dependencies)">开发依赖(Development dependencies)</h3>
+
+<p>如果一个依赖只在开发过程中用到,应该将其保存为“开发依赖”(这样,包的用户便无需在生产环境中安装它们)。比如,如果要使用 <a href="http://eslint.org/">eslint</a>(一款流行的 JavaScript lint 工具)可以这样调用 NPM:</p>
+
+<pre class="brush: bash"><code>$ npm install eslint --save-dev</code></pre>
+
+<p>当前应用的 <strong>package.json </strong>文件中将自动添加以下项目:</p>
+
+<pre class="brush: js"> "devDependencies": {
+ "eslint": "^5.12.0"
+ }
+</pre>
+
+<div class="note">
+<p><strong>注:</strong>"<a href="https://zh.wikipedia.org/wiki/Lint">lint</a>" 是用于对软件进行静态分析的工具,可以发现并报告软件是否遵循某些最佳编程惯例。</p>
+</div>
+
+<h3 id="运行任务">运行任务</h3>
+
+<p>在 <strong>package.json</strong> 中,除了定义和获取依赖,还可以定义脚本,然后通过 NPM 的 <a href="https://docs.npmjs.com/cli/run-script">run-script</a> 命令来运行。这个用法普遍用于自动运行测试单元或部分应用,也可用于构建工具链(比如运行工具来压缩 JavaScript 文件或图片,lint 或分析代码,等等)。</p>
+
+<div class="note">
+<p><strong>注:</strong><a href="http://gulpjs.com/">Gulp</a> 和 <a href="http://gruntjs.com/">Grunt</a> 等任务运行器可用于运行测试单元或其它外部工具。</p>
+</div>
+
+<p>比如,可以在 <strong>package.json</strong> 文件中添加以下内容来定义一个脚本,从而对上文的代码运行 eslint(假设应用代码在 /src/js 文件夹下):</p>
+
+<pre class="brush: js">"scripts": {
+ ...
+ "lint": "eslint src/js"
+ ...
+}
+</pre>
+
+<p>深入解释一下,eslint src/js 命令可以在终端/命令行对应用目录下的 src/js 目录中的 JavaScript 文件运行 eslint。把上面一段脚本添加进应用的 package.json 中还可以为此命令提供一个快捷方式—— lint。</p>
+
+<p>然后就可以用 NPM 这样运行 eslint 了:</p>
+
+<pre class="brush: bash"><code>$ npm run-script lint</code></pre>
+
+<p>或使用别名:</p>
+
+<pre class="brush: bash"><code>$ npm run lint</code></pre>
+
+<p>这个示例看上去并没有让原始命令简洁多少,但在 NPM 脚本中可以加入更长的命令,甚至是多命令链。比如可以让单一的 NPM 脚本来一次运行所有的测试单元。</p>
+
+<h2 id="安装_Express_应用生成器">安装 Express 应用生成器</h2>
+
+<p><a href="https://expressjs.com/en/starter/generator.html">Express 应用生成器</a> 工具可以生成一个 Express 应用的“框架”。可以用 NPM 这样安装它(-g 参数可以把该工具全局安装,那样就可以在任意应用中使用了):</p>
+
+<pre class="brush: bash"><code>$ npm install express-generator -g</code></pre>
+
+<p>进入应用目录,运行以下命令,即可创建一个名为 "helloworld" 的 Express 应用:</p>
+
+<pre class="brush: bash">$ express helloworld</pre>
+
+<div class="note">
+<p><strong>注:</strong>也可以指定模板库来使用其它丰富的设置。可通过 help 命令来查看所有选项:</p>
+
+<pre class="brush: bash">$ express --help
+</pre>
+</div>
+
+<p>NPM 将在当前位置的子目录中创建新的 Express 应用,可以在控制台看到构建的过程。在完成时,NPM 会提示你需要安装哪些 Node 依赖,以及如何开启应用。</p>
+
+<div class="note">
+<p>新应用的根目录有一个 <strong>package.json</strong> 文件。可以打开它看看都安装了哪些依赖,其中可以看到 Express 和 Jade 模板库:</p>
+
+<pre class="brush: js">{
+ "name": "helloworld",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "start": "node ./bin/www"
+ },
+ "dependencies": {
+ "cookie-parser": "~1.4.3",
+ "debug": "~2.6.9",
+ "express": "~4.16.0",
+ "http-errors": "~1.6.2",
+ "jade": "~1.11.0",
+ "morgan": "~1.9.0"
+ }
+}</pre>
+</div>
+
+<p>用下列命令可为 helloworld 应用安装所有依赖:</p>
+
+<pre class="brush: bash">$ cd helloworld
+$ npm install
+</pre>
+
+<p>然后运行这个应用(Windows 环境):</p>
+
+<pre class="brush: bash">&gt; SET DEBUG=helloworld:* &amp; npm start
+</pre>
+
+<p>(Linux/macOS 环境):</p>
+
+<pre class="brush: bash">$ DEBUG=helloworld:* npm start</pre>
+
+<p>DEBUG 命令可以展示应用运行时返回的有用的日志信息,如下所示:</p>
+
+<p><img alt="设置 DEBUG 命令显示的日志信息" src="https://mdn.mozillademos.org/files/16404/debug.png"></p>
+
+<p>打开浏览器并访问 <a href="http://127.0.0.1:3000/">http://127.0.0.1:3000/</a> 将看到 Express 的默认欢迎页面。</p>
+
+<p><img alt="生成应用的默认主页" src="https://mdn.mozillademos.org/files/16405/express.png"></p>
+
+<p>稍后在创建应用框架一节中将讨论生成应用的具体细节。</p>
+
+<ul>
+</ul>
+
+<h2 id="小结">小结</h2>
+
+<p>现在 Node 开发环境已经配置好了,可以用于创建 Express 应用了。你还了解了用 NPM 导入 Express 的步骤,以及如何创建(使用 Express 应用生成器)和运行 web 应用。</p>
+
+<p>下一节将开始用上述的环境和工具通过实战逐步搭建一个完整的 web 应用。</p>
+
+<h2 id="另请参阅">另请参阅</h2>
+
+<ul>
+ <li><a href="https://nodejs.org/zh-cn/download/">Node.js 下载页面</a> (nodejs.org 官方中文页面)</li>
+ <li><a href="https://nodejs.org/zh-cn/download/package-manager/">通过包管理器方式安装 Node.js</a> (nodejs.org 官方中文页面)</li>
+ <li><a href="http://www.expressjs.com.cn/starter/installing.html">安装 Express</a> (expressjs.com.cn 中文镜像页面)</li>
+ <li><a href="http://www.expressjs.com.cn/starter/generator.html">Express 应用程序生成器</a> (expressjs.com.cn 中文镜像页面)</li>
+</ul>
+
+<p>{{PreviousMenuNext("Learn/Server-side/Express_Nodejs/Introduction", "Learn/Server-side/Express_Nodejs/Tutorial_local_library_website", "Learn/Server-side/Express_Nodejs")}}</p>
+
+<h2 id="本章目录">本章目录</h2>
+
+<ul>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/Introduction">Express/Node 入门</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/development_environment">设置 Node(Express)开发环境</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/Tutorial_local_library_website">Express 教程:本地图书馆网站</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/skeleton_website">Express 教程 2:创建站点框架</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/mongoose">Express 教程 3:使用数据库(Mongoose)</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/routes">Express 教程 4:路由和控制器</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/Displaying_data">Express 教程 5:显示图书馆数据</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/forms">Express 教程 6:使用表单</a></li>
+ <li><a href="/zh-CN/docs/Learn/Server-side/Express_Nodejs/deployment">Express 教程 7:部署至生产环境</a></li>
+</ul>