这些天,每个人都在谈论Node.js ,但是您不确定它是什么吗? 或者,您是否只想以一些书呆子知识打动您的朋友? 本文将带您快速了解Node.js的世界!
2009年5月27日, Ryan Dahl发布了以JavaScript和C ++编写的开源软件平台的初始版本。 但是他为什么命名为Node? 在项目开始时 ,一个无阻塞的Web服务器称为web.js。 赖安·达尔(Ryan Dahl)很快发现Web服务器还不够,因此他创建了一个基础来控制称为节点的分布式系统之间的交互-?? 事件驱动的非阻塞I / O系统。
Node应用程序是使用JavaScript开发的,因为Node基于Google的开源JavaScript引擎V8。 V8与使Chrome拥有出色的JavaScript性能的引擎相同。 这使您可以为在Linux,MacOS,Windows或SunOS上运行的每个设备创建应用程序。
您还将获得一个由核心和第三方Node模块组成的大型库,以处理其中的几乎所有任务。 核心模块与Node捆绑在一起,而第三方模块可以使用Node的软件包管理器进行安装。 而且,由于Node是根据MIT许可发布的,因此您可以免费使用所有这些!
可以将模块视为大型系统中的最小部分。 从技术上讲,单个源文件被视为一个模块,但通常多个文件一起工作以构成一个模块(或库)。 模块旨在解决单个问题,并且仅解决该问题。 然后,应用程序可以充当使这些模块协同工作的粘合剂。
有多种方法可以在系统上安装Node。 您可以在任何受支持的系统上从源代码构建Node,但是使用程序包管理器或安装程序通常更简单。
使用自动安装程序来安装Node。
使用系统默认的软件包管理器安装节点软件包。
您可以使用软件包,Flink,自制软件或macports来安装Node。
打开命令行,然后输入node -v
。 这会将当前安装的Node版本打印到终端窗口。 如果看不到版本号,则说明出现了问题,请尝试重新安装。 您还应该通过键入命令npm -v
验证是否已安装Node的软件包管理器(npm)。
创建一个名为hello_world.js
的文件。 Node允许您使用内置的console.log()
函数将消息打印到终端。 将以下代码添加到hello_world.js
:
console.log('Hello World');
要执行此程序,请打开一个终端窗口,然后转到包含hello_world.js
的目录。 在该目录中,键入命令node hello_world
。 该命令调用Node并告诉它执行hello_world.js
的内容。 如果一切正常,您应该在终端上看到消息Hello World。
如前所述,Node附带了一组核心模块 。 本节描述了三个常用的核心模块,但是本节绝不是全面的。
console
这类似于大多数Web浏览器提供的console
对象功能,但是输出被发送到标准输出( stdout
)或标准错误( stderr
)。 您已经在Hello World示例中看到了操作中的console
对象。 值得指出的是,默认情况下,每个Node应用程序都使用console
,这意味着您无需显式导入它。 有关此模块的更多信息,请参见:
http
当大多数人想到Node时,他们就会想到Web服务器。 HTTP模块提供了用于处理HTTP / HTTPS流量的服务器和客户端。 与console
对象不同,必须使用require()
函数将http
模块显式导入到应用程序中(您很快会看到一个示例)。 有关http
模块的更多信息,请参见:
fs
fs
模块提供与文件系统交互的异步和同步功能。 本文将不涉及fs
模块的详细信息,但好奇的读者将针对该主题的上一篇SitePoint文章。 官方的Node文档和源代码也可在以下位置获得:
一个非常简单的Web服务器的源代码如下所示。 该服务器利用前面提到的http
核心模块。 将以下代码保存在web_server.js
。
// Load the "http" module
var http = require('http');
// Create a HTTP server
// - request comes from the client
// - response goes to the client
http.createServer(function(request, response) {
// Send the HTTP status code "200 - ok" to the request
// and set the content type to "text/plain"
response.writeHead(200, {'Content-Type': 'text/plain'});
// Tell the server that everything has been sent to the client
// so that the server considers this message as complete
response.end('Hello World');
// Accept connections on port and IP
}).listen(1337, '127.0.0.1');
// Tell the user that the server is up and running
console.log('Server running at http://127.0.0.1:1337/');
通过在终端窗口中键入命令node web_server
来运行服务器。 现在,您可以通过打开自己喜欢的浏览器并导航到http://127.0.0.1:1337/来访问服务器。 您将在浏览器中看到美丽的Hello World消息。
如果要使用更多的核心模块,则无法使用Node's Package Manager或npm。 npm从其注册表中安装了第三方模块,其中包含超过64,000个模块。 从Node 0.6.3版本开始,npm会自动捆绑并安装,因此您可以立即使用它。
npm最常见的用例是从注册表中安装模块。 要安装模块,请发出命令npm install module_name
,其中module_name
是注册表中模块的ID。 例如,要安装Express框架,您将发出以下命令:
npm install express
这将在您当前目录的node_modules
子目录中安装Express。 如果查看node_modules
内部,将看到另一个名为express
目录,其中包含Express模块的代码。 您还将在express
内部看到另一个node_modules
目录。 此目录包含Express依赖的所有模块。
您的代码所依赖的模块称为依赖项。 在我们的示例Web服务器中, http
是一个依赖项,但是由于它是核心模块,因此我们不必担心安装它。 如果您的代码依赖于第三方模块,那么npm需要了解它,以便可以安装它。 依赖项信息以及有关应用程序的其他元数据都存储在名为package.json
的文件中。 该文件存储在应用程序的根目录中,并包含JSON数据。
例如,假设您的项目依赖于coffee-script
模块。 您需要将其包含在package.json
。 幸运的是,当您使用--save
参数安装模块时,可以自动更新package.json
,如下所示:
npm install --save coffee-script
当然,您可能还没有package.json
文件,因此不会发生任何特殊情况。 我们将很快重新访问package.json
文件。 现在,只知道前面的命令会在package.json
创建如下内容:
...
"dependencies": {
"coffee-script": "^1.7.1"
}
...
要创建一个包,您只需要创建一个package.json
文件。 由于这是一个普通的JSON文件,因此您可以自己编写一个。 但是,该文件应包含某些字段,并且您很容易犯一个错误。 因此,建议您使用npm init
命令自动生成package.json
。 此命令将提示您输入重要值。 npm init
的示例如下所示。 括号中的值是npm提供的建议。 您可以简单地按Enter键接受建议,或键入您自己的值,如version
行所示。
name: (node-package.json)
version: (0.0.0) 0.0.1
description: How to create a new package.json
entry point: (index.js)
test command:
git repository: (git://github.com/TimPietrusky/node-package.json.git)
keywords: package, json
license: (ISC) MIT
完成所有提示后,将创建一个package.json
文件,其中包含项目的名称(必需),版本(必需),描述,作者,关键字,存储库,主页以及其他有用的数据。 通过提供package.json
文件,另一个开发人员可以轻松安装模块及其所有依赖项。 该 GitHub存储库(以及发布到npm注册表中的任何存储库)中都提供了一个示例package.json
文件。
这些只是package.json
基础知识。 如果您想了解所有可用的属性,则应阅读package.json
速查表 。
本文提供了使用Node的绝对基础。 但是,这只是冰山一角,Node是那里发展最快的社区之一。 我建议您查看官方的Node项目页面,以获取指向代码,文章,视频等的链接。 还要注意将来的SitePoint文章,这些文章涵盖的主题包括将代码发布到npm,用于Node开发的IDE以及与Node一起使用的托管提供程序。
想更多地了解这个? 我们的姊妹公司Learnable 开设了全新的Node.js课程 !
From: https://www.sitepoint.com/enter-world-node-js/