Commit adb32596 authored by 马旭烽's avatar 马旭烽

📃 docs: Node.js 文档阅读体验重构

parent f169c1b0
1. nodeJs 的定义:
# 定义
1. nodeJs 的定义:
如果让我对 nodeJs 的定义是它是可以让我们执行一些更底层的逻辑的程序,让我们前端可以用自己熟悉的语言来对计算执行一些很 cool 的能力,拥有着浏览器无法想象的操作权限。
2. 上面讲到我们前端熟悉的语言,指定是什么。我想说就是 ECMA Script 。如果我们只在浏览器开发,那么关于 script 这一块的知识组成部分 DOM + BOM + ECMA.而 nodeJs 呢 有它 自身提供 node api + ECMA + 以及类似浏览器的调试对象 Console。ECMA 就是我们前端的语法规范,提供了基础编程能力,而像浏览器提供扩展能力和 Node 提供的 api 都属于扩展能力,使得我们逻辑可以操控一些看起来不可思议的功能。我把扩展能力简单第称做功能接口。所以的话,别当心你不会,因为我也一样吗只是了解表层,但我也可以做到简单辅助脚本工作,实现一些 no Only Browser 的东西。
3. 好了接下来,你可以去教程任务里提交你的完成。
# 定义
关于Node.js 的定义:
如果让我对 Node.js 的定义是它是可以让我们执行一些更底层的逻辑的程序,让我们前端可以用自己熟悉的语言来对计算执行一些很 cool 的能力,拥有着浏览器无法想象的操作权限。
# 对于前端的你知识掌握
1. 上面讲到我们前端熟悉的语言,指的是什么。
1. 我想说就是 ECMA Script 。如果我们只在浏览器开发,那么关于 script 这一块的知识组成部分 DOM + BOM + ECMA.而 Node.js 呢 有它 自身提供 node api + ECMA。
2. ECMA 就是我们前端的语法规范,提供了基础编程能力,而像浏览器提供扩展能力和 Node 提供的 api 都属于扩展能力,使得我们逻辑可以操控一些看起来不可思议的功能。我把扩展能力简单第称做功能接口。
3. 所以的话,别当心你不会,因为我也一样吗只是了解表层,但我也可以做到简单辅助脚本工作,实现一些 no Only Browser 的东西。
2. 好了接下来,你可以去教程任务里提交你的完成。
1. 请按照以下步骤:如果是第一次请切一个自己喜欢的分支名,
2. 在对应任务的 `[ ]` 的空格删除,换成 `x` 表示你已经完成了。
3. 然后提交你的 commit `[对应的文件夹名字 eg.1]以及你喜欢的提交风格`
4. 最后 git log 查看你的学习历史。
# 阅读体验
1. 如果想在 VScode 获得较好的阅读体验,可以在 vscode 里下载 Markdown All in One 这个插件,它在 vscode 的编辑tab 右上角有一个预览 markdown 的功能。
# 简述
Node.js是一个可以让我们执行底层逻辑的程序环境,它提供了比浏览器更强大的操作权限。对于前端开发者来说,我们熟悉的是ECMAScript(ECMA规范定义的前端语法规范)。ECMAScript提供了基础的编程能力,而浏览器和Node.js提供的API则是扩展能力,使得我们可以实现一些令人惊叹的功能。
作为前端开发者,我们主要使用的是浏览器环境。在浏览器中,我们使用HTML、CSS和JavaScript来构建和展示网页。然而,Node.js让我们能够将这些前端技术应用到服务器端和命令行环境中,执行一些有趣和强大的操作。
通过使用Node.js,我们可以编写服务器端应用程序、命令行工具、脚本和其他各种类型的应用。我们可以利用Node.js的异步非阻塞模型和丰富的模块生态系统来构建高效、可扩展和功能丰富的应用程序。
在接下来的学习过程中,我们将探索Node.js的各个方面,并使用它来解决实际的问题和开发有趣的项目。
让我们一起开始学习Node.js吧!
\ No newline at end of file
# 让我们对 nodeJs 进行程序员特有的打招呼吧 🙋
# 让我们对 Node.js 进行程序员特有的打招呼吧 🙋
# 让我们对 nodeJs 进行程序员特有的打招呼吧 🙋
我假设你安装了 nodeJs 并在 shell 中可以访问 nodeJs 这个程序 例如 `node -v`, nodeJs 版本在 16.x 这个范围
# 让我们对 Node.js 进行程序员特有的打招呼吧 🙋
我假设你安装了 Node.js 并在 shell 中可以访问 Node.js 这个程序 例如 `node -v`, Node.js 版本在 16.x 这个范围
1. 在当前文件夹中创建一个名为 `index.js` 的空文件
2. 在上面输入
```nodeJs
```javascript
console.log("Hello, World!, I am 我的名字");
```
保存后,打开当前文件夹的 shell 窗口
......
# nodeJs 模块化是什么呢。
# Node.js 模块化是什么呢。
# nodeJs 模块化是什么呢。
# Node.js 模块化是什么呢。
1. nodeJs 模块化是 nodeJs 提供的一种集成代码逻辑的能力。使得我们使用 node 执行脚本的时候可以把代码逻辑分散到各个文件,也可以获得 nodeJs api 的能力。
2. nodeJs 最初的模块是 CommonJs 规范,就是今天的主角 node 16, node 16 版本默认的是 commonJs 规范。
不得不说,node 迭代非常的快,目前已经默认使用 es 规范了。
不同规范的包同时引入也导致了模块🌹解析之前的冲突。比方说 commonJs 规范的入口引入了 es 规范的模块会导致 node 执行爆模块错误,通常来说会有个波浪线强调 import 的字段。通常来说确定模块化规范会根据 package 的 字段 、 如果是 ts 的 还有 tsconfig 字段来确定模块化规范。
1. Node.js 模块化是 Node.js 提供的一种集成代码逻辑的能力。使得我们使用 node 执行脚本的时候可以把代码逻辑分散到各个文件,也可以获得 Node.js api 的能力。
2. 最初,Node.js使用的是CommonJS规范来实现模块化。CommonJS规范定义了一套模块导入和导出的方式,使得我们可以方便地在不同的模块之间共享和使用代码,就是今天的主角 node 16, node 16 版本默认的是 commonJs 规范。
3. 然而,随着时间的推移,Node.js社区也逐渐转向了ES模块规范。现在,我们可以使用import和export关键字来进行模块的导入和导出。这种ES模块规范在浏览器中也得到了广泛支持。
4. 不得不说,node 迭代非常的快,目前社区生态已经默认使用 es 规范了,所以这是一个 es 与 cjs 规范共存的时间点。
不同规范的包同时引入也导致了模块化解析之前的冲突。比方说 commonJs 规范的入口引入了 es 规范的模块会导致 node 执行报模块错误,通常来说会有个波浪线强调 import 的字段。通常来说确定模块化规范会根据 package 的 字段 、 如果是 ts 的 还有 tsconfig 字段来确定模块化规范。
、node 执行的时候会依据当前目录最近的上一级的 package 文件,来确定模块化规范,如果没有的话,就是走 node 默认的模块化规范解析逻辑。
3. 说了这么多,让我们看看 CommonJs 的模块化规范吧
5. 在编写模块时,我们需要注意循环引用和模块路径的问题。为了解决循环引用,我们可以将需要的模块放在函数内部进行导入。对于模块路径的解析,我们可以使用相对路径或绝对路径,也可以利用package.json文件中的main字段来指定模块的入口文件。
总的来说,模块化是Node.js中的重要概念,它使得我们可以更好地组织和管理代码,并且提供了代码复用和封装的好处。通过使用CommonJS规范或ES模块规范,我们可以方便地编写和使用模块,使得我们的应用程序更加模块化和可扩展。
# 尝试
1. 说了这么多,让我们看看 CommonJs 的模块化规范吧
导入模块
示例:
```javascript
// Common JS module pattern
// 这些都是 nodeJs 内置的 api 模块
// 这些都是 Node.js 内置的 api 模块
const path = require('path') // 相当于 es 规范的 import * as default 语法
const { writeFile } = require('fs'); // 相当于 import {} frojm 'xxx'
......@@ -32,25 +44,30 @@ module.exports = {
```
好了,话不多说,简单实操一下。
1. 参考 `index.js` 文件, 在 `my.js` 操作
1. 参考 `index.js` 文件, 在 `my.js` 操作编写自己的模块化
2. 使用`require` 引入模块解构出 join 方法(该方法是用来拼接路径)
3. 继续引入文件模块 fs ,仔细观察 `vscode` ,是否有 require 方法提示,有的话,恭喜你获取了 vscode 的智能提示可以更加愉快的编码工作。
没有的话,可以安装 node-snippet 或者在当前项目根目录安装 ts 提示 `npm install @types/node@16.x -D`
4. 记住由于现在模块规范在过,往往市面上的 npm 包有可能是 es 规范,导致我们的 cjs 规范解析异常,所以可以尝试降级版本,每一次降级一个一个大版本。
4. 记住由于现在模块规范在过渡时期,往往市面上的 npm 包有可能是 es 规范,导致我们的 cjs 规范解析异常,所以可以尝试降级版本,每一次降级一个一个大版本。
如果是模块的模块版本异常,可以尝试手动修改包依赖版本,或者找更适合的包。(建议的话,还是找替代品或者看一下 issue 是否有解决方案)
5. 代码从 index.js 手动搬到 index.js 加深一些 api 的理解
5. 将代码从 index.js 手动搬到 my.js 加深一些 api 的理解
6. 在看一下当前文件夹下 package.json , script 字段,这里有两条命令, 一条是 "start" ,另一条是 “start:my”, 都是用 包管理器去启动 node 程序去执行一个脚本文件, 一个是调试 demo 脚本,一个是调试你自己的脚本,所以我们可以用文字描述
6. 在看一下当前文件夹下 package.json , script 字段,这里有两条命令, 一条是 "start" ,另一条是 “start:my”, 都是用 包管理器去启动 node 程序去执行一个脚本文件,所以我们可以用文字描述
```bash
node [文件路径] (参数1) (参数2) ...
```
然后,我们可以将鼠标悬浮在上面,会出现两个文字,如果是英文的是 run/debug ,如果是中文则是 运行/调试。
7. 然后,我们可以将鼠标悬浮在上面,会出现两个文字,如果是英文的是 run/debug ,如果是中文则是 运行/调试。
这一节,我们了解运行这一个就好了,后面有机会话会挑个章节讲讲。点击后,vscode 就会自动调用对应脚本命令,这是我们学到的第二种 node 脚本启动方式
7. 如果文件创建成功了,我们就进如下一个实操。
# 结语
1. 如果文件创建成功了,我们就进如下一个实操。
8. 这一节主要分享了几个知识点
2. 这一节主要分享了几个知识点
1. 模块化 是什么 ?
2. 引入不同入口的模块化规范的话,会导致解析异常。
3. 什么是 CommonJs 规范
......
{
"name": "study3",
"version": "1.0.0",
"description": "学习nodeJs第三次相遇",
"description": "学习Node.js第三次相遇",
"main": "index.js",
"scripts": {
"start": "node index.js",
......
# 前言
# 前言
# 前言
讲到这里的时候,我猜你应该对模块化有了点理解但是又不太清楚。没关系的,我也只是对这样的,目前理解也是停留在用的层面,但不影响我继续使用它实现一些好玩的功能。
在之前也介绍一些 nodejs 的知识网站。顺便也开阔一下我自己的视野。(平常基本除官网以外其他的都不看的)
[node 16 官网文档](https://nodejs.org/docs/latest-v16.x/api/)
# 文档
在之前也介绍一些 Node.js 的知识网站。顺便也开阔一下我自己的视野。(平常基本除官网以外其他的都不看的)
[node 16 官网文档](https://Node.js.org/docs/latest-v16.x/api/)
node 官网早些年间还是可以直接访问,可能是官网上曾经有“种族平等”、“支持乌克兰”之类比较活跃的头条广告,给墙了,据说当时好像一堆人在 issue 骂官方,具体的瓜就没吃过。有兴趣可以找一下。官网16版本目前也只有提供英文版。
[node 中文网](http://www.nodejs.com.cn/api-v16/documentation.html) 早些年间排名相当靠前,当时风格和 node 官网保持一致,后面似乎这个用爱发电的网站作者遭受了一些滑铁卢,就升级网站,还有准备收费查看。不知道为什么现在进去又免费了,可能作者又恢复了经济,恭喜这位用爱发电的作者。中文支持比较好。
[node 中文网](http://www.Node.js.com.cn/api-v16/documentation.html) 早些年间排名相当靠前,当时风格和 node 官网保持一致,后面似乎这个用爱发电的网站作者遭受了一些滑铁卢,就升级网站,还有准备收费查看。不知道为什么现在进去又免费了,可能作者又恢复了经济,恭喜这位用爱发电的作者。中文支持比较好。
[node 菜鸟](https://www.runoob.com/nodejs/nodejs-repl.html) 拥有比较好的中文支持,也有不错的教材,对基础模块稍微熟一点就可以学到不错的东西了。
[node 菜鸟](https://www.runoob.com/Node.js/Node.js-repl.html) 拥有比较好的中文支持,也有不错的教材,对基础模块稍微熟一点就可以学到不错的东西了。
[程序员成长指北] 公众号分享一些 node 相关的知识点,在里面认识了一个非常好的老哥。
公众号里面有一遍 "最全面的 node.js 资源汇总推荐" 个人觉得不错,不过这些资源偏硬核,也就是偏计算机领域相关的知识,而不是我们前端范畴的知识。
公众号里面有一遍 "最全面的 Node.js 资源汇总推荐" 个人觉得不错,不过这些资源偏硬核,也就是偏计算机领域相关的知识,而不是我们前端范畴的知识。
# 介绍一些 nodeJs 的常用模块
# 介绍一些 Node.js 的常用模块
## Node.js api 我觉得比较重要会放在前面,后面的模块就随意排序,这些模块会加入我的一些个人理解。
- path 模块里面提供了路径解析、凭借、绝对路径判断、文件夹、文件名以及扩展名等解析等函数。
......@@ -24,10 +25,13 @@
不限于编写爬虫获取网络资源,文本转换、动态生成文本等。
## 补充一些前些章节在文档中找到相关的知识点。
- [node 启动脚本](http://www.nodejs.com.cn/api-v16/cli.html#program-entry-point)
- [CommonJs](http://www.nodejs.com.cn/api-v16/modules.html) 以及上下附近 Module 相关以了解模块化的知识
... 还有好多,发现都不错,比以前的文档舒服多了。中文网真不错。
- [node 启动脚本](http://www.Node.js.com.cn/api-v16/cli.html#program-entry-point)
- [CommonJs](http://www.Node.js.com.cn/api-v16/modules.html) 以及上下附近 Module 相关以了解模块化的知识
## 写完后,发现太久没翻文档了。官方写的都比我详细 🥹。
## 后一章节,我准备推荐一些我用过的库 & 以及找找比较好用的库
\ No newline at end of file
## 结语
写完后,发现太久没翻文档了。官方写的都比我详细 🥹。
这一节涵盖了一些常用的Node.js模块,它们可以满足我们大部分的编写脚本逻辑的需求。当然,对于每个模块来说,我们只是浅尝辄止,但已经足够我们进行大多数场景下的脚本编写了。
在下一章节,我将继续推荐一些我使用过的库和一些好用的库。
\ No newline at end of file
......@@ -11,7 +11,7 @@ const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({
// 无头浏览器模式
headless: 'new',
// 自定义使用数据文件夹,无的话,应该是走末日文件夹共用
// 自定义使用数据文件夹,无的话,应该是走默认文件夹共用
// 这些文件夹放着我们书签、插件、临时文件……
// userDataDir: '',
// 启动参数
......
# 这一节,我会推荐比较常用的基于 node.js 环境的模块
# 这一节,我会推荐比较常用的基于 Node.js 环境的模块
# 这一节,我会推荐比较常用的基于 node.js 环境的模块
# 这一节,我会推荐比较常用的基于 Node.js 环境的模块
## 功能
......@@ -24,7 +24,7 @@
没有接触过,听说是一款比较好的企业级服务器框架。即成了 ts、注解(装饰器)、切面、依赖注入,内聚了不少开箱即用的功能
### axios
没想到吧, axios 其实是同构包,通过适配器,抽象出一个请求,通过判断当前全局实例来确定对应的请求适配器,可以在 浏览器、node.js 环境下工作
没想到吧, axios 其实是同构包,通过适配器,抽象出一个请求,通过判断当前全局实例来确定对应的请求适配器,可以在 浏览器、Node.js 环境下工作
### shellJS
跨平台的执行 shelljs 命令,让你可以你熟悉的方式编写 shell 脚本
......@@ -52,4 +52,4 @@
## 生产
### 进程管理 pm2
pm2 可以对 nodejs 的服务实例进程管理,以及进程守护。 进程管理主要是启动多个实例的,停止部分实例,追踪实例异常
\ No newline at end of file
pm2 可以对 Node.js 的服务实例进程管理,以及进程守护。 进程管理主要是启动多个实例的,停止部分实例,追踪实例异常
\ No newline at end of file
# 简述
这是简单的 node 入门学习教程,没有复杂的任务,也没有复杂的概念。(因为我也不会,超大声)
我会提供一种相对小的任务去让你熟悉 nodejs 的特性,还有讲述一些可能碰到的问题 🤔 。
这是简单的 node 入门学习教程,没有复杂的任务,也没有复杂的概念。(因为我也不会,超大声)
我会提供一种相对小的任务去让你熟悉 Node.js 的特性,还有讲述一些可能碰到的问题 🤔 。
## 学习 Node.js 的动机
记得我最初的时候,是只会 vue 的阶段, 当时安装了了 Node,但我对它真的不太理解。只知道从网上它是一个脱离浏览器可以执行 js 代码相关的执行环境。
在机缘巧合下,看到了一位前辈用 Node.js 做的 js 脚本解决问题,给了我的世界观冲击,原来前端不仅仅只可以能在浏览器下跑代码,仅仅只能写页面。
在随后的日子这个种子就在我内心生根发芽。
在业余时间里,我实现第一个是我的爬虫脚本,我个人比较喜欢看一下小说,所以的话,我通常会备份一份到本地 txt文件 ,方便自己导入手机,在被窝里偷偷看小说。
当时我根据互联网的搜索,东拼西凑写了一个获取页面的函数,一个提取页面string生成txt数据的函数,一个批量异步调用的脚本(主要是当心对对方网站访问压力太大或者当作害虫给清理了),在这个过程自己发现了第一种串联调用方式,异步递归,可以生成我想要 txt 文件, 免去手动复制的乏味。
这么多年过去了,我还是只会一点点,但我借用它完成了不少机械的操作。
这就是关于我的学习动机,我希望学习 Node.js 方便我的生活。
而你可以思考一下,你学习的动机又是什么。
请写在下方坚定你的学习动力。
# 学习小游戏
## 1
[ ] 阅读 nodeJs 简述[链接](./1/%E4%BB%80%E4%B9%88%E6%98%AFnodeJs.md)
## 2
[ ] 打印属于你的世界 [链接](./2/%E6%89%93%E5%8D%B0%E5%B1%9E%E4%BA%8E%E4%BD%A0%E7%9A%84%E4%B8%96%E7%95%8C.md)
[ ] 挑战任务
## 3
[ ] 创建一个json文件,并了解模块化的小知识 [链接](./3/node%E6%A8%A1%E5%9D%97%E5%8C%96.md)
## 4
【 】和作者一起碎碎念 [链接](./4/%E5%9B%9E%E5%BD%92%E5%AE%98%E6%96%B9.md)
## 5
【 】第三方模块补充 [链接](./5/%E7%AC%AC%E4%B8%89%E6%96%B9%E6%A8%A1%E5%9D%97%E6%8E%A8%E8%8D%90.md)
### 本次 nodeJs 入门暂时到此为止了
## 1. 认识你的起点
- 本节主要介绍了你关于入门 Node.js 有多少距离
- [ ] 阅读 Node.js 简述[链接](./1/%E4%BB%80%E4%B9%88%E6%98%AFnodeJs.md)
## 2. 完成脚本编写
- 本节主要介绍它的直观工作方式,让你熟悉它的运行
- [ ] 打印属于你的世界 [链接](./2/%E6%89%93%E5%8D%B0%E5%B1%9E%E4%BA%8E%E4%BD%A0%E7%9A%84%E4%B8%96%E7%95%8C.md)
- [ ] 挑战任务
## 3 模块化以及 Node.js 以及它实现最早的模块化的 CommonJs 规范
- 本节主要介绍如何引用 Node.js 模块,以及 Node.js 在现有生态可能存在的冲突问题解决思路,让你在学会引用第三方代码和解决生态冲突问题
- [ ] 用脚本创建一个json文件,并了解模块化的小知识 [链接](./3/node%E6%A8%A1%E5%9D%97%E5%8C%96.md)
## 4 回归官方文档
- 本节主要是为了提供第一手学习资料,减少你对基础知识的丢失率
- [ ] 和作者一起碎碎念 [链接](./4/%E5%9B%9E%E5%BD%92%E5%AE%98%E6%96%B9.md)
## 5 作者对常用模块推荐
- 本节主要介绍作者在和 Node.js 时间里的一些常用模块推荐,带你快速熟悉主流工具
- [ ] 第三方模块补充 [链接](./5/%E7%AC%AC%E4%B8%89%E6%96%B9%E6%A8%A1%E5%9D%97%E6%8E%A8%E8%8D%90.md)
### 本次 Node.js 入门暂时到此为止了
完结撒花 ing
我的文档主要是让你少走些弯路,帮你踩坑。
不想对知识的主观性做太多干涉,毕竟只有差异,才有灿烂。
如果你有想帮你踩坑的知识内容,就在 issue 里提议吧。🤫
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment