Node.js 官网入门教程(一) CommonJS 模块规范、Node.js REPL、console、CLI、exports
文章目录
总结:
通用
- Node.js安装包:http://nodejs.cn/download/。
- API检索网址:API 文档 | Node.js 中文网 (nodejs.cn)
- 第三方模板引擎:art-template官方文档
- Express: 提供了创建 Web 服务器的最简单但功能最强大的方法之一。 它的极简主义方法,专注于服务器的核心功能,是其成功的关键。
- koa: 由 Express 背后的同一个团队构建,旨在变得更简单更轻巧。 新项目的诞生是为了满足创建不兼容的更改而又不破坏现有社区。
- readyState
- 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
- 0: 请求未初始化
- 1: 服务器连接已建立
- 2: 请求已接收
- 3: 请求处理中
- 4: 请求已完成,且响应已就绪
- status
- 200, OK,访问正常
- 301, Moved Permanently,永久移动
- 302, Moved temporarily,暂时移动
- 304, Not Modified,未修改
- 307, Temporary Redirect,暂时重定向
- 401, Unauthorized,未授权
- 403, Forbidden,禁止访问
- 404, Not Found,未发现指定网址
- 500, Internal Server Error,服务器发生错误
简介
定义
- 通俗易懂的讲,Node.js是JavaScript的运行平台,Node.js既不是语言,也不是框架,它是一个平台
- Node.js 应用程序运行于单个进程中,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原生功能(用以防止 JavaScript 代码被阻塞),并且 Node.js 中的库通常是使用非阻塞的范式编写的(从而使阻塞行为成为例外而不是规范)。
CommonJS 模块系统
Node.js 使用 CommonJS 模块系统,而在浏览器中,则还正在实现 ES 模块标准
在实践中,这意味着在 Node.js 中使用
require()
,而在浏览器中则使用import
。Webpack五大核心
entry:webpack打包的入口,其取值可以是字符串,数组或者一个对象
output:webpack打包的输出
mode:webpack打包分为两种模式,开发模式(development)与生产模式(production),默认为生产模式
选项 描述 development 会将 process.env.NODE_ENV 的值设为 development。启用 NamedChunksPlugin 和 NamedModulesPlugin。 production 会将 process.env.NODE_ENV 的值设为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 UglifyJsPlugin.
loader:webpack默认只能处理js、json格式的文件,而loader的作用则是将其他格式的文件,转换成webpack能够处理的文件
plugin:webpack插件,每一个插件都有一个特定的功能,它能处理loader无法处理的事情。插件的使用非常简单,在plugins数组中添加插件的实例化对象即可
Node使用:
- EcmaScript语言
- 和浏览器一样,在Node中没有Bom和Dom
- 核心模块
- process
- process.exit()
- process.env.NODE_ENV
- 文件操作的fs
- http服务操作的http
- url路径操作模块
- path路径处理模块
- os操作系统信息
- 第三方模块
- art-template: art-template官方文档
- 必须通过npm来下载才可以使用。node package manage(node包管理器)
- 自己写的模块
- 自己创建的文件
CommonJS 模块规范
- 在Node中的JavaScript还有一个重要的概念,模块系统。
- 模块作用域
- 使用require方法来加载模块
- 使用exports接口对象来导出模板中的成员
package.json
每一个项目都要有一个
package.json
文件(包描述文件,就像产品的说明书一样)这个文件可以通过
npm init
自动初始化出来Express
- 原生的http在某些方面表现不足以应对我们的开发需求,所以就需要使用框架来加快我们的开发效率,框架的目的就是提高效率,让我们的代码高度统一。
Node.js REPL
REPL 也被称为运行评估打印循环,是一种编程语言环境(主要是控制台窗口),它使用单个表达式作为用户输入,并在执行后将结果返回到控制台。
如果在终端中尝试,则会出现如下:
❯ node >
该命令会保持空闲状态,并等待输入内容。
确切地说,REPL 正在等待输入一些 JavaScript 代码。
从简单开始,输入:
> console.log('测试') 测试 undefined >
第一个值
测试
是告诉控制台要打印的输出,然后得到undefined
,它是运行console.log()
的返回值。现在可以输入一行新的 JavaScript。
console
%s
会格式化变量为字符串%d
会格式化变量为数字%i
会格式化变量为其整数部分%o
会格式化变量为对象CLI
1. 简介
Node.js 是一个开源与跨平台的 JavaScript 运行时环境。 它是一个可用于几乎任何项目的流行工具!
Node.js 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使 Node.js 表现得非常出色。
Node.js 应用程序运行于单个进程中,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原生功能(用以防止 JavaScript 代码被阻塞),并且 Node.js 中的库通常是使用非阻塞的范式编写的(从而使阻塞行为成为例外而不是规范)。
当 Node.js 执行 I/O 操作时(例如从网络读取、访问数据库或文件系统),Node.js 会在响应返回时恢复操作,而不是阻塞线程并浪费 CPU 循环等待。
这使 Node.js 可以在一台服务器上处理数千个并发连接,而无需引入管理线程并发的负担(这可能是重大 bug 的来源)。
Node.js 具有独特的优势,因为为浏览器编写 JavaScript 的数百万前端开发者现在除了客户端代码之外还可以编写服务器端代码,而无需学习完全不同的语言。
在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为不必等待所有用户更新其浏览器,你可以通过更改 Node.js 版本来决定要使用的 ECMAScript 版本,并且还可以通过运行带有标志的 Node.js 来启用特定的实验中的特性。
大量的库
npm 的简单结构有助于 Node.js 生态系统的激增,现在 npm 仓库托管了超过 1,000,000 个可以自由使用的开源库包。
Node.js 应用程序的示例
Node.js 最常见的 Hello World 示例是 Web 服务器:
const http = require('http') //首先引入了 Node.js http 模块。
const hostname = '127.0.0.1'
const port = 3000
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('你好世界\n')
})
server.listen(port, hostname, () => {
console.log(`服务器运行在 http://${
hostname}:${
port}/`)
})
此代码首先引入了 Node.js http
模块。
Node.js 具有出色的标准库,包括对网络的一流支持。
http
的 createServer()
方法会创建新的 HTTP 服务器并返回它。
服务器被设置为监听指定的端口和主机名。 当服务器就绪后,回调函数会被调用,在此示例中会通知我们服务器正在运行。
每当接收到新的请求时,request
事件会被调用,并提供两个对象:一个请求(http.IncomingMessage
对象)和一个响应(http.ServerResponse
对象)。
这两个对象对于处理 HTTP 调用至关重要。
第一个对象提供了请求的详细信息。 在这个简单的示例中没有使用它,但是你可以访问请求头和请求数据。
第二个对象用于返回数据给调用方。
在此示例中:
res.statusCode = 200
设置 statusCode 属性为 200,以表明响应成功。
设置 Content-Type 响应头:
res.setHeader('Content-Type', 'text/plain')
关闭响应,添加内容作为 end()
的参数:
res.end('你好世界\n')