Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可以实现在服务器端运行 JavaScript。它是一个事件驱动的非阻塞 I/O 模型,能够处理大量并发连接,适合构建实时的应用程序。
Node.js 主要用于构建服务器端应用程序,可以用于开发 Web 服务器、网络应用和命令行工具等。通过使用 Node.js,开发人员可以使用 JavaScript 的强大特性来构建高性能、可扩展的应用程序。
1.Node.js 的特点包括:
高性能:Node.js 使用非阻塞的 I/O 模型,可以处理大量并发连接,提供了高性能的网络应用开发能力。
事件驱动:Node.js 使用事件驱动的编程模型,通过回调函数处理事件,使得开发人员可以编写简洁、高效的代码。
跨平台:Node.js 可以在多个操作系统上运行,包括 Windows、Linux 和 macOS 等。
强大的包管理系统:Node.js 使用 npm(Node Package Manager)作为包管理工具,提供了丰富的模块和库供开发人员使用。
大型开源社区:Node.js 拥有庞大的开源社区,提供了大量的模块和库,可以方便地扩展和复用现有的代码。
总之,Node.js 是一个非常强大和灵活的服务器端开发工具,可以帮助开发人员构建高性能、可扩展的应用程序。它的出现极大地推动了 JavaScript 在服务器端的应用发展,带来了前端开发的蓬勃发展。
2-认识Nodejs
Node.js是一个开源、跨平台的JavaScript运行环境,它使用V8引擎执行JavaScript代码,并且提供了非阻塞I/O模型和事件驱动机制。以下是一个简单的Node.js HTTP服务器创建的例子:
// 引入内置的http模块
const http = require('http');
// 创建一个HTTP服务器
const server = http.createServer((req, res) => {
// 当接收到请求时,响应客户端
res.statusCode = 200; // 设置HTTP状态码为200(OK)
res.setHeader('Content-Type', 'text/plain'); // 设置响应头内容类型为纯文本
res.end('Hello World from Node.js!\n'); // 向客户端发送响应数据
});
// 让服务器监听3000端口
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
// 当在浏览器中访问 http://localhost:3000/ 时,将会看到“Hello World from Node.js!”的输出
这个例子展示了如何使用Node.js原生的http
模块创建一个基本的Web服务器。当我们在本地运行这段代码后,任何向服务器发送HTTP GET请求的客户端都将收到"Hello World from Node.js!"的响应。这体现了Node.js处理网络请求和响应的能力,以及其适合构建可扩展的网络应用的特点。
3-开发环境搭建
在2024年,搭建Node.js开发环境的步骤仍然相对直观和简洁。以下是搭建Node.js开发环境的一般步骤:
-
下载并安装Node.js:
- 访问Node.js官方网站(https://nodejs.org/),选择适合你操作系统的版本进行下载。
- 对于Windows用户,通常下载
.msi
安装包;对于macOS或Linux用户,可以下载.pkg
或.tar.gz
文件。 - 运行下载的安装程序,按照提示完成安装。
注意:确保选择的是LTS(长期支持版)或者最新的稳定版。
-
验证安装:
- 安装完成后,在命令行终端中输入以下命令来检查Node.js和npm(Node包管理器)是否成功安装:
node -v npm -v
- 如果看到相应的版本号,则说明安装成功。
- 安装完成后,在命令行终端中输入以下命令来检查Node.js和npm(Node包管理器)是否成功安装:
-
配置环境变量(可能自动完成,如果没有则需手动添加):
- 在某些情况下,尤其是在Windows上,需要将Node.js可执行文件路径添加到系统环境变量PATH中,以便在任何目录下都能运行
node
和npm
命令。
- 在某些情况下,尤其是在Windows上,需要将Node.js可执行文件路径添加到系统环境变量PATH中,以便在任何目录下都能运行
-
创建项目并初始化:
- 到达你的项目目录,可以使用
npm init
命令初始化一个新的Node.js项目:cd my_project_folder npm init -y
-y
参数表示接受所有默认设置,会自动生成一个package.json
文件。
- 到达你的项目目录,可以使用
-
开始开发:
- 安装项目依赖:
npm install --save express # 以安装Express框架为例
- 创建你的主应用文件(如
index.js
)并编写代码。 - 运行你的应用:
node index.js
- 安装项目依赖:
-
其他工具:
- 考虑使用npm脚本、nvm(Node Version Manager)、pnpm(更高效的包管理器)或其他开发者工具来进一步增强开发体验。
根据不同的操作系统,具体细节可能会有所不同,但以上步骤提供了基本的指引。确保始终从官方渠道获取最新版本的Node.js安装包,并根据官方文档或社区指南进行操作。
4-模块-包-commonJS-1
在Node.js中,CommonJS是模块系统的核心规范,它允许开发者在一个文件(称为模块)中定义变量、函数和类,并通过require()
方法导入其他模块的输出。以下是一个简单的CommonJS模块示例:
module1.js - 这是我们要导出的一个模块:
// module1.js
// 定义一个函数和一个变量
function add(a, b) {
return a + b;
}
const message = 'Hello from module1';
// 使用exports或module.exports暴露这些对象供外部使用
exports.add = add;
exports.message = message;
main.js - 这个文件将导入并使用module1.js
中的函数和变量:
// main.js
// 导入module1.js模块
const module1 = require('./module1');
// 使用导入的函数和变量
console.log(module1.add(3, 5)); // 输出:8
console.log(module1.message); // 输出:Hello from module1
在这个例子中,module1.js
是一个遵循CommonJS规范的模块,它通过exports
对象对外提供了一个函数add
和一个字符串message
。而在main.js
中,我们通过require
函数导入了这个模块,并可以访问到其公开的所有属性和方法。
5-模块-包-commonJS-2
在Node.js中,除了上一个示例展示的基本模块导出和导入方式外,CommonJS还支持更复杂的模块结构。以下是一个包含子模块的CommonJS模块系统的例子:
module1/index.js - 这个模块包含了多个内部模块(子模块)并对外提供接口:
// module1/index.js
const submoduleA = require('./submoduleA');
const submoduleB = require('./submoduleB');
// 暴露模块接口
module.exports = {
doSomethingFromA: submoduleA.doSomething,
doSomethingFromB: submoduleB.doSomething,
};
module1/submoduleA.js - 子模块A:
// module1/submoduleA.js
function doSomething() {
console.log('Doing something from submodule A');
}
// 暴露函数
module.exports = {
doSomething,
};
module1/submoduleB.js - 子模块B:
// module1/submoduleB.js
function doSomething() {
console.log('Doing something from submodule B');
}
// 暴露函数
module.exports = {
doSomething,
};
main.js - 主文件,导入module1
模块并使用其功能:
// main.js
const module1 = require('./module1');
// 使用从module1导入的功能
module1.doSomethingFromA(); // 输出:Doing something from submodule A
module1.doSomethingFromB(); // 输出:Doing something from submodule B
在这个例子中,module1
是一个复合模块,它通过导入和组合内部子模块的功能,为外部提供了统一的接口。主文件main.js
可以通过单一的导入语句访问到这些封装好的功能。这种组织方式有利于模块化代码和管理复杂项目中的依赖关系。
6-npm使用
在Node.js环境中,npm(Node Package Manager)是用于管理项目依赖和发布软件包的工具。以下是一个使用npm的基本例子:
场景: 你正在开发一个Node.js应用,并需要安装Express框架作为HTTP服务器。
-
初始化新项目:
在终端中进入你的项目目录,然后运行以下命令来初始化一个新的npm项目并创建package.json
文件:npm init -y
-y
参数表示接受所有默认设置,这样会自动生成package.json
文件,它包含了项目的配置信息和依赖列表。 -
安装依赖:
接下来,安装Express框架:npm install express --save
这条命令将下载并安装Express模块到项目的
node_modules
目录下,并且自动将它添加到package.json
的dependencies部分,这意味着当其他人克隆这个项目时,可以通过运行npm install
来获取所有的依赖项。 -
在项目中使用Express:
创建或编辑你的应用主文件(如index.js
),然后引入并使用Express:// index.js const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World from Express!'); }); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`App is running on http://localhost:${port}`); });
-
运行应用:
回到终端,在项目根目录下执行:node index.js
应用程序将会启动并在指定端口监听HTTP请求。
以上就是使用npm安装并使用Node.js模块的一个基本示例。在整个过程中,npm帮助我们轻松地管理和版本化项目中的依赖关系。
7-nrm使用
nrm(Node Registry Manager)是一个用于管理和切换npm registry源的工具。下面是一个使用nrm的基本例子:
场景: 你想要在多个npm镜像源之间切换,比如在开发过程中快速地从官方源切换到国内镜像源以提高下载速度。
-
安装nrm:
首先,在全局环境中安装nrm:npm install -g nrm
-
查看当前registry源:
安装完成后,可以查看当前使用的npm源:nrm current
-
列出所有可用registry源:
如果你想查看可选的所有npm registry源及其状态,运行:nrm ls
-
切换registry源:
假设你想要将npm源切换至淘宝npm镜像(taobao),以便加速包的下载,执行:nrm use taobao
-
测试registry源速度:
在决定使用哪个源之前,还可以测试各个源的响应速度:nrm test
通过这些命令,nrm帮助开发者方便快捷地在不同npm注册表之间切换,优化依赖包的获取体验。
8-yarn使用
Yarn是Facebook开发的一个JavaScript包管理器,它是npm的替代品,提供更快、更安全的依赖管理。以下是一个使用Yarn的基本示例:
场景: 你正在创建一个新的Node.js项目,并且想要使用Yarn来安装和管理依赖。
-
初始化新项目并创建
package.json
文件:
在终端中进入你的项目目录,然后运行:yarn init -y
-y
参数表示接受所有默认设置,这将快速生成一个package.json
文件。 -
添加并安装依赖:
假设你要在项目中安装Express框架:yarn add express
这条命令会下载并安装Express模块到项目的
node_modules
目录下,并且自动更新package.json
中的dependencies部分。 -
安装开发依赖:
如果需要安装仅用于开发环境的依赖,例如测试工具Mocha:yarn add --dev mocha
或简写为:
yarn add mocha --dev
-
查看已安装的依赖:
要查看当前项目的所有已安装依赖及其版本信息:yarn list
-
检查依赖更新:
检查是否有可用的依赖升级:yarn outdated
-
更新依赖:
更新指定依赖至最新版本(或全部依赖):# 更新express至最新版本 yarn upgrade express # 更新所有依赖至最新版本 yarn upgrade
通过这些命令,你可以看到Yarn是如何帮助我们更有效地管理和更新项目依赖的。同时,Yarn还具有缓存机制以及更好的一致性保证,使得团队协作更加顺畅。
9-ES模块化写法
ES6模块化(ECMAScript Modules)引入了原生的模块系统,允许开发者以更清晰和安全的方式导入和导出代码。下面是一些ES模块化的基本例子:
导出模块内容
1. 默认导出 (default export)
在math.js
文件中有一个默认导出的函数:
// math.js
export default function add(a, b) {
return a + b;
}
2. 明确命名导出 (named exports)
在utils.js
文件中有多项明确命名的导出:
// utils.js
export const PI = 3.14159;
export function square(number) {
return number * number;
}
export class User {
constructor(name) {
this.name = name;
}
}
导入模块内容
1. 导入默认导出
在另一个文件中导入上述math.js
的默认导出:
// main.js
import add from './math';
console.log(add(2, 3)); // 输出:5
2. 导入并重命名默认导出
如果需要导入时给默认导出一个不同的名字:
// main.js
import calculateSum from './math'; // 将add重命名为calculateSum
console.log(calculateSum(2, 3)); // 输出:5
3. 导入明确命名的导出
导入utils.js
中的所有或部分命名导出:
// main.js
// 导入全部命名导出,并赋予别名
import { square as sqr, PI, User } from './utils';
console.log(sqr(4)); // 输出:16
console.log(PI); // 输出:3.14159
let newUser = new User('Alice');
console.log(newUser.name); // 输出:Alice
// 或者仅导入特定的几个命名导出
import { square } from './utils';
通过这些例子可以看出,ES6模块化提供了一种结构化的方式来组织和复用代码。
最后求点赞,求分享,求抱抱…