NodeJS

116 阅读3分钟

REPL 交互式解释器

  • ctrl + c - 退出当前终端。
  • ctrl + c 按下两次 - 退出 Node REPL。
  • ctrl + d - 退出 Node REPL.
  • 向上/向下 键 - 查看输入的历史命令
  • tab 键 - 列出当前命令
  • .help - 列出使用命令
  • .break - 退出多行表达式
  • .clear - 退出多行表达式
  • .save filename - 保存当前的 Node REPL 会话到指定文件
  • .load filename - 载入当前 Node REPL 会话的文件内容。
const repl = require('repl');

package.json

  • name 名称。
  • description 简短描述。
  • keywords 关键字。
  • version 版本,主版本.次版本.补丁版本
  • repository 仓库地址。
  • author 作者。
  • contributors 贡献者。
  • license 许可证。
  • main 入口点。
  • private 如果设置为 true,则可以防止包被意外地发布到 npm
  • scripts 定义了一组可以运行的 node 脚本。
  • dependencies 生产依赖。
  • devDependencies 开发依赖。
  • engines 设置了此软件包/应用程序在哪个版本的 Node.js 上运行。
  • browserslist 用于告知要支持哪些浏览器(及其版本)

package-lock.json

该文件旨在跟踪被安装的每个软件包的确切版本,以便产品可以以相同的方式被 100% 复制(即使软件包的维护者更新了软件包)

npm 包管理器

# 全局安装
npm install -g lodash@1.2.0
# 查看全局安装的包的位置
npm root -g

# 安装到项目node_modules中
npm install -D lodash
# 安装到package.json文件中dependencies(生产)
--save 或 -S 或 不给参数默认生产依赖
# 安装到package.json文件中devDependencies(开发)
--save-dev 或 -D
# 安装所有包(没有包名参数,默认安装所有开发依赖)
npm install
# 安装所有生产依赖
npm install --production

# 查看所有已安装的包
npm list
# 查看所有已安装全局的包
npm list -g
# 查看已安装包和它依赖包的版本
npm list cowsay
# 查看包在npm仓库最新版本
npm view cowsay version
# 查看所有包的新版本
npm outdated

# 全部包更新到最新版本,依赖npm-check-updates包
npm install -g npm-check-updates
ncu -u
npm update

# 卸载包,并删除package.json的开发依赖项
npm uninstall -D cowsay

npx 包运行器

npx @vue/cli create my-vue-app
npx create-react-app my-react-app

# 也可以运行GitHub上的代码
npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32

几种常见模块化规范

  • AMD规范,浏览器环境中异步加载模块,而且可以并行加载多个模块。
  • CMD规范,与AMD规范很相似,都用于浏览器编程,依赖就近,延迟执行。
  • CommonJS规范,加载模块是同步的,不适合浏览器环境,同步意味着阻塞
  • ES6,动态引用,如果使用import从一个模块加载变量,那些变量不会缓存,而是成为一个指向被加载模块的引用impor/export最终都是编译为require/exports来执行的

事件循环

NodeJS使用事件驱动模型。

  • 调用堆栈是一个LIFO队列(后进先出)
  • 消息队列(事件、定时器等的回调函数会放入消息队列)
  • ES6作业队列(Promise、async/await,在调用堆栈后消息队列前)
  1. 所有同步任务都在主线程上执行,形成一个执行栈
  2. 当主线程中的执行栈为时,检查消息队列是否为空,如果为空,则继续检查;如不为空,则执行3
  3. 取出消息队列的首部,加入执行栈
  4. 执行任务
  5. 检查执行栈,如果执行栈为空,则跳回第 2 步;如不为空,则继续检查

global 全局变量

类似于浏览器的window

各种模块使用

查阅API文档