当前位置: 首页 > article >正文

Node.js 常用命令全攻略

一、引言

Node.js 作为一个基于 Chrome V8 引擎的 JavaScript 运行时环境,在服务器端开发、命令行工具开发以及构建各种高性能、高并发的网络应用中占据着重要地位。熟练掌握 Node.js 的常用命令,对于开发者来说能够显著提高开发效率,更好地管理项目依赖,优化项目性能以及进行高效的调试。本文将对 Node.js 的常用命令按功能进行详细划分和深入讲解,旨在为开发者提供全面且实用的 Node.js 命令参考指南。

二、基础命令

(一)node 命令

node 命令是 Node.js 的核心命令,用于执行 JavaScript 文件。例如,我们有一个简单的 hello.js 文件,内容如下:

console.log('Hello, Node.js!');

在命令行中,进入该文件所在目录,然后执行 node hello.js,就会在控制台输出 Hello, Node.js!。这是 Node.js 最基本的使用方式,它允许开发者直接运行包含 Node.js 代码的脚本文件,使得 JavaScript 能够脱离浏览器环境,在服务器端或命令行中发挥强大的功能。

(二)node -e 或 node --eval 命令

这两个命令用于直接在命令行中执行一段 JavaScript 代码,而无需将代码写在单独的文件中。例如,执行 node -e "console.log('This is a one-line script.')",控制台将直接输出 This is a one-line script.。这种方式适用于快速测试一些简单的 JavaScript 表达式或代码片段,无需创建和管理额外的文件,提高了代码执行的便捷性和即时性。

三、模块管理命令

(一)npm init 命令

npm init 命令用于在当前目录下创建一个新的 package.json 文件,这是 Node.js 项目的核心配置文件。在执行 npm init 后,命令行会逐步引导开发者输入项目的相关信息,如项目名称、版本、描述、入口文件、测试命令、仓库地址、关键词、作者、许可证等。这些信息将被记录在 package.json 文件中,用于描述项目的基本属性和配置信息,方便后续的依赖管理、项目发布以及与其他开发者共享代码。例如:

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (my-node-project)
version: (1.0.0)
description: A sample Node.js project
entry point: (index.js)
test command:
git repository:
keywords: node, sample, project
author: Your Name
license: (ISC) MIT
About to write to /Users/yourname/my-node-project/package.json:

{
  "name": "my-node-project",
  "version": "1.0.0",
  "description": "A sample Node.js project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "node",
    "sample",
    "project"
  ],
  "author": "Your Name",
  "license": "MIT"
}


Is this OK? (yes)

通过以上步骤,一个基本的 package.json 文件就创建成功了,开发者可以根据实际需求进一步修改和完善其中的配置信息。

(二)npm install 命令

npm install 命令用于安装项目所需的依赖包。它有多种使用方式:

  • 安装单个依赖包npm install package-name,例如 npm install express,会将 express 包及其所有依赖项安装到项目的 node_modules 目录下,并将该依赖的相关信息记录在 package.json 文件的 dependencies 字段中(如果使用了 --save 选项,这是默认行为)。
  • 安装开发依赖包npm install package-name --save-dev,这种方式用于安装仅在开发过程中需要的依赖包,如测试框架、代码格式化工具等。这些依赖会被记录在 package.json 文件的 devDependencies 字段中,在生产环境中不会被安装,有助于优化项目的部署体积和依赖管理。例如 npm install mocha --save-dev 用于安装 mocha 测试框架作为开发依赖。
  • 全局安装依赖包npm install package-name -g,某些 Node.js 包提供了全局可用的命令行工具,如 nodemon(用于自动重启 Node.js 应用程序)、typescript 编译器等。通过全局安装,这些工具的命令可以在任何目录下的命令行中直接使用,而无需在每个项目中单独安装。例如 npm install nodemon -g,安装完成后,在任何项目目录下都可以使用 nodemon 命令来启动应用程序,实现自动监听文件变化并重启服务的功能。

(三)npm uninstall 命令

npm uninstall 命令用于卸载项目中的依赖包,其使用方式与 npm install 类似:

  • 卸载单个依赖包npm uninstall package-name,例如 npm uninstall lodash,会将 lodash 包从项目的 node_modules 目录中移除,并同时从 package.json 文件的 dependencies 字段中删除对应的依赖信息(如果该依赖是通过 --save 方式安装的)。
  • 卸载开发依赖包npm uninstall package-name --save-dev,用于卸载开发依赖包,会从 devDependencies 字段中删除相应信息,例如 npm uninstall eslint --save-dev 可卸载 eslint 代码检查工具。

(四)npm update 命令

npm update 命令用于更新项目中的依赖包到最新版本(根据 package.json 文件中指定的版本范围)。例如 npm update(在项目根目录下执行)会检查 package.json 中所有依赖的新版本,并将可以更新的依赖包升级到兼容的最新版本,同时更新 package-lock.json 文件(如果存在)以记录依赖的具体版本信息。这有助于保持项目依赖的安全性和性能优化,及时获取依赖包的新特性和修复的漏洞,但在更新过程中需要注意版本兼容性问题,避免因依赖更新导致项目出现异常。

(五)npm list 命令

npm list 命令用于查看项目中已安装的依赖包及其依赖关系树。执行 npm list 会在命令行中输出项目依赖的详细信息,包括直接依赖和间接依赖,以树形结构展示每个依赖包的名称、版本以及其依赖的其他包。例如:

$ npm list
my-node-project@1.0.0 /Users/yourname/my-node-project
└─┬ express@4.17.1
  ├─┬ accepts@1.3.7
  │ ├─┬ mime-types@2.1.32
  │ │ └── mime-db@1.47.0
  │ └── negotiator@0.6.2
  ├─┬ array-flatten@1.1.1
  ├─┬ body-parser@1.19.0
  │ ├── bytes@3.1.0
  │ ├── content-type@1.0.4
  │ ├── debug@2.6.9
  │ ├── depd@1.1.2
  │ ├── http-errors@1.7.2
  │ │ ├── inherits@2.0.4
  │ │ └── setprototypeof@1.2.0
  │ ├── iconv-lite@0.4.24
  │ ├── on-finished@2.3.0
  │ │ └── ee-first@1.1.1
  │ ├── qs@6.9.4
  │ ├── raw-body@2.4.1
  │ │ ├── unpipe@1.0.0
  │ │ └── bytes@3.1.0
  │ └── type-is@1.6.18
  │   ├── media-typer@0.3.0
  │   └── mime-types@2.1.32
  ├─┬ content-disposition@0.5.3
  ├─┬ content-type@1.0.4
  ├─┬ cookie@0.4.0
  ├─┬ cookie-signature@1.0.6
  ├─┬ debug@2.6.9
  ├─┬ depd@1.1.2
  ├─┬ encodeurl@1.0.2
  ├─┬ escape-html@1.0.3
  ├─┬ etag@1.8.1
  ├─┬ express@4.17.1
  ├─┬ finalhandler@1.1.2
  │ └── unpipe@1.0.0
  ├─┬ fresh@0.5.2
  ├─┬ merge-descriptors@1.0.1
  ├─┬ methods@1.1.2
  ├─┬ on-finished@2.3.0
  ├─┬ parseurl@1.3.3
  ├─┬ path-to-regexp@0.1.7
  ├─┬ proxy-addr@2.0.6
  │ ├── forwarded@0.1.2
  │ └── ipaddr.js@1.9.1
  ├─┬ qs@6.9.4
  ├─┬ range-parser@1.2.1
  ├─┬ send@0.17.1
  │ ├── destroy@1.0.4
  │ ├── http-errors@1.7.2
  │ └── mime@1.6.0
  ├─┬ serve-static@1.14.1
  │ ├── encodeurl@1.0.2
  │ └── parseurl@1.3.3
  ├─┬ setprototypeof@1.2.0
  ├─┬ statuses@1.5.0
  ├─┬ type-is@1.6.18
  ├─┬ utils-merge@1.0.1
  └─┬ vary@1.1.2

通过这个命令,开发者可以清晰地了解项目的依赖结构,方便排查依赖冲突和版本问题,同时也有助于了解项目所依赖的各个模块及其相互关系,对于项目的维护和优化具有重要意义。

(六)npm view 命令

npm view 命令用于查看远程包的信息,包括版本号、依赖关系、许可证、描述等详细信息,而无需实际安装该包。例如 npm view axios 会输出 axios 包的详细信息,如:

$ npm view axios
axios@0.21.1 | MIT | deps: none | versions: 58
Axios is a promise-based HTTP client for the browser and node.js.
... (省略部分信息)
dist:
  shasum: 'c4717091c91496999760d1d7711099c882c64021',
  tarball: 'https://registry.npmjs.org/axios/-/axios-0.21.1.tarball'
  integrity: 'sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLrgoB016zV7rA==',
  unpackedSize: 250420

dependencies:
  follow-redirects: '^1.14.0'

devDependencies:
  eslint: '^7.32.0',
  eslint-config-prettier: '^8.3.0',
  eslint-plugin-import: '^2.25.2',
  eslint-plugin-prettier: '^3.4.0',
  husky: '^6.0.0',
  lint-staged: '^11.1.2',
  prettier: '^2.4.1',
  sinon: '^10.0.0'

engines:
  node: '>= 10'

keywords:
  - http
  - ajax
  - xhr
  - http client
  - promise
  - node
  - browser

license: MIT

maintainers:
  - mattzeunert <mattzeunert@gmail.com>
  - nickuraltsev <nickuraltsev@gmail.com>
  - jasonsaayman <jasonsaayman@gmail.com>
  - henriqueacferreira <henriqueacferreira@gmail.com>
  - gjr <gjr@live.com>
  - fabiospampinato <fabiospampinato@gmail.com>
  - seaneking <seaneking@gmail.com>
  - mzabriskie <mzabriskie@gmail.com>

name: axios
optionalDependencies: {}
readme: '# Axios [![Build Status](https://travis-ci.org/axios/axios.svg?branch=master)](https://travis-ci.org/axios/axios) [![NPM version](https://badge.fury.io/js/axios.svg)](https://badge.fury.io/js/axios) [![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/axios/badge?style=rounded)](https://www.jsdelivr.com/package/npm/axios)

Axios is a promise-based HTTP client for the browser and node.js.

... (省略部分信息)

通过 npm view 命令,开发者可以在决定是否安装某个包之前,先了解其详细信息,包括其版本历史、依赖情况、是否符合项目的技术栈和需求等,从而做出更明智的决策,避免不必要的依赖引入和潜在的问题。

四、项目运行与调试命令

(一)npm start 命令

npm start 命令用于启动项目的主脚本,通常在 package.json 文件中通过 scripts 字段进行配置。例如:

{
  "name": "my-node-project",
  "version": "1.0.0",
  "scripts": {
    "start": "node index.js"
  }
}

在上述配置中,执行 npm start 就相当于执行 node index.js,用于启动项目的主要业务逻辑。这是一种约定俗成的方式,使得项目的启动命令更加简洁和统一,方便开发者在不同项目中快速找到并启动应用程序,同时也便于团队协作,因为大家都遵循相同的规范来配置项目的启动方式。

(二)npm run 命令

npm run 命令用于执行 package.json 文件中 scripts 字段下定义的自定义脚本。除了 start 脚本外,开发者还可以定义其他各种自定义脚本,如 buildtestlint 等,用于执行项目的构建、测试、代码检查等任务。例如:

{
  "name": "my-node-project",
  "version": "1.0.0",
  "scripts": {
    "start": "node index.js",
    "build": "webpack --config webpack.config.js",
    "test": "mocha tests/*.js",
    "lint": "eslint src/*.js"
  }
}

在这个例子中,开发者可以分别执行 npm run build 来使用 webpack 进行项目构建,npm run test 来运行 mocha 测试套件,npm run lint 来使用 eslint 进行代码检查。这种方式将项目的各种任务脚本化,提高了项目开发和维护的效率,同时也使得项目的构建、测试和代码质量保证流程更加自动化和规范化。

(三)node --inspect 或 node --inspect-brk 命令

node --inspect 命令用于启动 Node.js 进程,并允许通过 Chrome 浏览器的开发者工具进行调试。例如 node --inspect index.js,执行后会输出一个调试 URL,如 chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/...,将这个 URL 复制到 Chrome 浏览器中打开,就可以进入调试界面,对正在运行的 Node.js 应用程序进行断点调试、查看变量值、调用栈等操作,方便开发者排查代码中的问题和优化程序逻辑。

node --inspect-brk 命令与 node --inspect 类似,但它会在代码的第一行暂停执行,等待开发者连接调试器,这对于需要在程序开始处就进行调试的情况非常有用,可以确保不会错过任何关键的代码执行步骤,方便设置初始断点和检查程序的初始状态。

五、进程管理命令

(一)pm2 start 命令

pm2 是一个强大的 Node.js 进程管理工具,pm2 start 命令用于启动一个 Node.js 应用程序,并将其作为守护进程运行在后台。例如,pm2 start app.js 会启动 app.js 这个 Node.js 应用,即使在终端关闭后,应用也会继续在后台运行。这对于需要长期稳定运行的 Node.js 服务(如 Web 服务器、后台任务处理程序等)非常重要,它可以确保应用在服务器重启或意外崩溃后能够自动重新启动,保证服务的高可用性。

pm2 start 还支持多种启动选项,比如指定应用名称(--name)、设置启动的实例数量(-i)以实现应用的集群模式,从而充分利用多核 CPU 的性能优势,提高应用的处理能力和吞吐量。例如:pm2 start app.js --name my-app -i 4 会以 my-app 为名称启动 4 个 app.js 的实例,实现应用的集群部署,适用于处理高并发请求的场景,提升应用的整体性能和响应速度。

(二)pm2 stop 命令

pm2 stop 命令用于停止正在运行的 Node.js 应用程序进程。例如,pm2 stop my-app(假设之前使用 pm2 start 启动的应用名称为 my-app)将会停止该应用的所有运行实例,优雅地关闭应用,确保在停止过程中不会丢失数据或产生异常情况,这在进行应用的更新、维护或临时下线时非常有用。

(三)pm2 restart 命令

pm2 restart 命令用于重启已运行的 Node.js 应用程序,它会先停止应用的现有进程,然后再重新启动它们。例如,pm2 restart my-app 会对名为 my-app 的应用进行重启操作,这种方式常用于应用代码更新后,快速应用新的代码更改,而无需手动停止和重新启动应用,简化了开发和部署流程,同时也确保了应用在重启过程中的稳定性和可靠性,减少因重启导致的服务中断时间。

(四)pm2 list 命令

pm2 list 命令用于列出所有通过 pm2 管理的正在运行的 Node.js 应用程序及其相关信息,包括应用名称、进程 ID、运行状态、CPU 和内存使用情况等。执行 pm2 list 后,会在命令行中以表格形式展示每个应用的详细信息,例如:

$ pm2 list
┌─────┬────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name               │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ my-app             │ default     │ 1.0.0   │ fork    │ 12345    │ 2d     │ 1    │ online    │ 0%       │ 50MB     │ root     │ disabled │
└─────┴────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

通过这个命令,开发者可以方便地查看所有正在运行的应用程序的状态,快速了解各个应用的资源使用情况和运行状态,便于进行系统监控和性能优化,及时发现并解决可能出现的问题,如内存泄漏、CPU 过高负载等异常情况,确保整个 Node.js 应用集群的稳定运行。

(五)pm2 logs 命令

pm2 logs 命令用于查看通过 pm2 管理的 Node.js 应用程序的日志输出。它会实时显示应用程序在运行过程中输出到控制台的日志信息,方便开发者在应用运行时进行调试和问题排查。例如,pm2 logs my-app 会展示名为 my-app 的应用的日志内容,包括应用启动信息、错误信息、运行过程中的各种打印输出等,有助于开发者快速定位应用程序中的问题,了解应用的运行轨迹和内部状态,提高开发效率和问题解决速度。

此外,pm2 logs 还支持一些高级功能,如根据时间范围查看日志、查看特定进程的日志等,通过与其他命令行工具结合使用,可以实现更强大的日志管理和分析功能,帮助开发者更好地维护和优化 Node.js 应用程序。

六、文件操作与服务器命令

(一)fs 模块相关命令(通过 Node.js 脚本实现)

fs(文件系统)模块是 Node.js 中用于操作文件和目录的核心模块,虽然不是直接的命令行命令,但通过编写 Node.js 脚本,可以实现各种强大的文件操作功能,例如:

  • 文件读取
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
});

在上述代码中,使用 fs.readFile 方法读取 example.txt 文件的内容,并以 UTF-8 编码格式输出到控制台。这在处理配置文件读取、数据文件解析等场景中非常常见,允许 Node.js 应用程序获取外部文件中的数据并进行进一步的处理和分析。

  • 文件写入
const fs = require('fs');
const content = 'This is some new content to write to the file.';
fs.writeFile('example.txt', content, (err) => {
    if (err) throw err;
    console.log('File has been written successfully.');
});

这里使用 fs.writeFile 方法将指定的内容写入到 example.txt 文件中,如果文件不存在则会创建新文件,如果文件已存在则会覆盖原有内容。这种文件写入操作常用于记录日志、保存应用程序的状态数据或生成新的文件等场景,为 Node.js 应用程序提供了数据持久化的能力。

  • 目录操作
const fs = require('fs');
// 创建目录
fs.mkdir('new-directory', (err) => {
    if (err) throw err;
    console.log('Directory created successfully.');
});
// 读取目录内容
fs.readdir('.', (err, files) => {
    if (err) throw err;
    console.log('Files in the current directory:', files);
});

上述代码分别展示了如何使用 fs.mkdir 创建一个新的目录,以及使用 fs.readdir 读取当前目录下的所有文件和目录列表。目录操作在构建文件结构、管理文件存储等方面具有重要作用,例如在创建项目的特定目录结构(如 logs 目录用于存储日志文件、public 目录用于存放静态资源等)或遍历目录中的文件以进行批量处理时,fs 模块的目录操作功能能够提供高效且灵活的解决方案。

(二)http 模块相关命令(通过 Node.js 脚本实现)

http 模块是 Node.js 用于创建 HTTP 服务器的内置模块,通过编写 Node.js 脚本,可以快速搭建一个简单的 Web 服务器,例如:

const http = require('http');
const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!');
});
server.listen(3000, () => {
    console.log('Server running on port 3000');
});

在这段代码中,使用 http.createServer 方法创建了一个 HTTP 服务器,当客户端访问该服务器的根路径时,服务器会返回一个简单的文本响应 Hello, World!。通过监听指定的端口(这里是 3000 端口),服务器可以接收来自客户端的 HTTP 请求,并根据定义的路由和处理逻辑进行响应,这是构建 Node.js Web 应用程序的基础,开发者可以在此基础上扩展服务器的功能,如处理不同的 URL 路径、支持不同的 HTTP 方法(GET、POST、PUT、DELETE 等)、与数据库进行交互以提供动态数据等,从而构建出功能强大的 Web 应用和 API 服务。

七、性能优化与分析命令

(一)node --prof 命令

node --prof 命令用于生成 Node.js 应用程序的性能分析数据,它通过在应用运行过程中收集各种性能相关的信息,如函数调用的时间、频率、CPU 使用率等,生成一个 v8.log 文件(在 Node.js 12 及以上版本中)。例如,执行 node --prof app.js 会运行 app.js 应用,并在运行结束后生成性能分析日志文件。这些数据可以帮助开发者深入了解应用程序的性能瓶颈所在,找出哪些函数或代码段消耗了过多的 CPU 时间,从而有针对性地进行优化,提高应用的整体性能和响应速度。

(二)node --prof-process 命令(结合 --prof 使用)

node --prof-process 命令用于处理 --prof 命令生成的性能分析日志文件,将其转换为更易读的格式,以便开发者进行分析。例如,在生成 v8.log 文件后,执行 node --prof-process isolate-0x1234567890-v8.log > processed-profile.txt(其中 isolate-0x1234567890-v8.log 是实际生成的日志文件名),会将原始的性能分析数据转换为文本格式,并输出到 processed-profile.txt 文件中。这个文件中会详细列出每个函数的调用情况、执行时间、自执行时间等信息,通过对这些数据的分析,开发者可以清晰地看到应用程序在执行过程中的性能热点,进而对关键代码进行优化,如优化算法复杂度、减少不必要的函数调用、优化数据库查询逻辑等,以提升应用的性能表现。

(三)autocannon 命令(第三方工具)

autocannon 是一个流行的第三方性能测试工具,用于对 Node.js HTTP 服务器进行压力测试,评估服务器在高并发情况下的性能表现。例如,执行 autocannon -c 100 -d 10 http://localhost:3000 会对本地运行在 3000 端口的 HTTP 服务器发起 100 个并发请求,持续 10 秒钟,并输出详细的性能测试结果,包括每秒请求数(RPS)、平均延迟、延迟的标准差、最大延迟、最小延迟等信息。通过这些数据,开发者可以了解服务器在高负载情况下的性能瓶颈,如服务器的响应速度是否能够满足业务需求、是否存在资源竞争或性能瓶颈导致的延迟增加等问题,从而有针对性地对服务器进行优化,如优化服务器的硬件配置、调整服务器的参数设置、优化应用程序的代码逻辑等,以提高服务器的并发处理能力和整体性能。

八、结语

Node.js 的命令行工具提供了丰富多样的功能,涵盖了从项目初始化、依赖管理、运行调试到进程管理、性能优化等各个方面,熟练掌握这些常用命令对于提高 Node.js 开发效率、保证项目质量以及优化应用性能至关重要。无论是初学者还是有经验的开发者,深入了解和灵活运用这些命令,都能够更好地应对各种开发场景和挑战,构建出高效、稳定、可靠的 Node.js 应用程序,在服务器端开发、命令行工具开发以及 Web 应用开发等领域发挥 Node.js 的强大优势,提升开发体验和项目的成功交付率。同时,随着 Node.js 生态系统的不断发展和演变,新的命令和工具也在不断涌现,开发者应保持学习的热情和敏锐的洞察力,及时掌握最新的技术和工具,以适应不断变化的开发需求。


http://www.kler.cn/a/463161.html

相关文章:

  • RK3588+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案
  • 【74HC192减法24/20/72进制】2022-5-17
  • 直播预告丨社区年度交流会 《RTE 和 AI 融合生态洞察报告 2024》发布
  • 光伏安装在屋顶:安全、环保还是潜在威胁?
  • C#中自定义集合的序列化与反序列化实现
  • C++并发编程之内存顺序一致性
  • VSCode 插件开发实战(十三):如何添加个性化欢迎信息
  • Whiteboard-of-Thought——让大语言模型在白板上写下它们的推理过程,可以大大提高模型在视觉推理能力
  • Github - 如何提交一个带有“verified”标识的commit
  • 【漫话机器学习系列】031.数据增强(Dateset augmentation)
  • 安装、快速入门
  • npm 切换镜像源
  • MySQL5.7主从同步配置
  • mysql查询报错java.sql.SQLException: Illegal mix of collations for operation ‘UNION‘
  • 【智行安全】基于Synaptics SL1680的AI疲劳驾驶检测方案
  • 原生js封装ajax请求以及css实现提示效果和禁止点击效果
  • Android笔试面试题AI答之Android基础(9)
  • 扩充vmware磁盘大小以及分区
  • 细讲前端工程化
  • 使用SDL2搭建简易LVGL模拟器
  • 香港 GPU 服务器托管引领 AI 创新,助力 AI 发展
  • Ubuntu 上高效实现 Texlive 安装和管理
  • 关于flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型问题
  • Kali 自动化换源脚本编写与使用
  • Mac M2 Pro安装MySQL 8.4.3
  • Django中创建自定义命令发送钉钉通知