Kodokon kodokon.com

ES 模块与 npm:组织你的项目

你将用 package.json、ES 模块、npm 依赖和脚本来组织一个 Node 项目。

9 分钟 · 3 题

在 Kodokon 中打开本课

一个真正的项目装不进单个文件:你会把它拆分成模块,也就是一些文件,它们导出(export)自己所提供的东西,并导入(import)自己所需要的东西。你在 JavaScript 课程里已经认识了 import / export 语法;让我们来看看 Node 是如何启用它的。这一切都始于 package.json,也就是你项目的身份证:一个 JSON 格式的文件,描述项目的名字、版本和设置。要创建它,请进入一个空文件夹并运行 npm init -y-y 选项会接受所有的默认答案)。然后加上这一行 "type": "module":它告诉 Node 你的 .js 文件使用 ES 模块。

JSON
{
  "name": "my-project",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "start": "node main.js",
    "dev": "node --watch main.js"
  }
}
运行 npm init -y 之后的 package.json,再补上 type 那一行和我们下面要用到的两个脚本。

让我们在这个文件夹里创建两个文件:math.js 导出一个函数,main.js 导入它。一个 Node 特有的细节:导入一个本地文件时,必须以 ./ 开头,并以 .js 扩展名结尾。这两点都是必需的,这和某些网页工具所容许的做法不同。

JAVASCRIPT
// math.js
export function add(a, b) {
  return a + b;
}

// main.js
import { add } from "./math.js";

console.log(add(2, 3));
两个独立的文件。运行 node main.js:会出现结果 5。

npm 的巨大优势在于它那个全球性的(package)库:由他人编写、可以直接使用的代码。npm install 命令会把一个包下载到你项目的 node_modules 文件夹里,并把它添加到 package.json 的 dependencies(依赖)部分:也就是你的项目正常运行所需要的包的清单。一个自动创建的 package-lock.json 文件会记录所安装的确切版本,这样每个人拿到的东西都是一样的。让我们用 chalk 来试一试,这是一个能给终端里显示的文本上色的包。

BASH
npm install chalk
执行这个命令之后,chalk 会出现在 dependencies 和 node_modules 里;接着你就能像导入任何模块一样导入它了。

最后一根支柱:npm 脚本,也就是声明在 package.json 的 scripts 部分里的命令快捷方式。npm run dev 会运行以 dev 这个名字保存的命令,无论真正的命令有多长。我们的 dev 脚本使用了 node --watch,这个选项会在每次文件发生变化时自动重启程序:在开发过程中非常舒服。

BASH
npm run start
npm run dev
每个命令都会运行同名的脚本。用 Ctrl+C 停止监视模式。

知识检测

确认你已牢记本课的重点内容。

  1. package.json 文件的作用是什么?
    • 描述项目:名字、版本、脚本和依赖
    • 包含项目的主要 JavaScript 代码
    • 存放所下载的包的代码
    • 取代 node_modules 文件夹
  2. 当你运行 npm install chalk 时会发生什么?
    • chalk 被直接复制进你的 main.js 文件里
    • chalk 只是被下载了,不留下任何痕迹
    • chalk 被放进 node_modules,并被添加到 dependencies 里
  3. 为什么要在 package.json 里加上 type module 这一行?
    • 为了让 npm 安装包更快
    • 为了让 Node 把 .js 文件当作 ES 模块(import/export)来读取
    • 为了自动把项目发布到 npm 上