JavaScript(JS)是语言本身,像一份菜谱;照着做菜的程序叫运行时(runtime)。浏览器是最常见的一种;2009 年 JS 引擎被搬出浏览器做成独立程序,就是 Node.js。
node:fs)、跑子进程(node:child_process)^22.19 || >=24。包(package)是发布出来复用的代码,相当于手机 App;全发布在 npm registry(应用商店)。包管理器负责下载安装:老牌叫 npm,本项目用升级版 pnpm(更快、更省磁盘)。
任何包(含仓库本身和每个子包)根目录都有 package.json:
{
"name": "@deepseek-ai/dsh-tools", // @组织/包名 叫"scope"(命名空间)
"version": "0.1.0", // 语义化版本
"type": "module", // ESM 模块标准(下一节讲)
"dependencies": { // 运行时依赖:装我必须先装它们
"@deepseek-ai/cordis": "workspace:*"
}
}
本仓库一个真实包的 package.json(节选)
pnpm install 把所有依赖递归下载到 node_modules/,相当于食材一次买齐。
monorepo:许多包放同一仓库统一管理,像写字楼租户——共用电梯物业,各自独立经营。
pnpm-workspace.yaml 声明哪些目录的包算租户(主要是 packages/*);packages/<组>/<包名>/ 下,可独立发布;"workspace:*"(用楼里的版本)。@deepseek-ai/dsh-*(dsh = DeepSeek Harness 缩写);唯一例外 cordis——底层插件框架(阶段 1 专讲)。模块就是一个 JS/TS 文件,官方标准 ESM 用两个关键字连接:
// math.ts —— 导出
export function add(a: number, b: number) { return a + b }
export const PI = 3.14
// main.ts —— 导入
import { add, PI } from './math.ts'
console.log(add(1, 2)) // 3
像快递柜:export 放东西进柜子,import 凭取件码去拿。老标准 CommonJS(require)本仓库不用,看到 require 要警惕。
import/export 天然满足。TypeScript(TS)= JS + 类型标注,后缀 .ts,先编译成 .js 才能跑。相当于合同:类型写死,违反了开工前报错,不是跑到一半崩。
function greet(name: string): string {
return 'Hello, ' + name
}
greet('Ada') // ✔ 合同允许
greet(42) // ✘ 编译期就报错
| 写法 | 含义 | 通俗解释 |
|---|---|---|
string / number / boolean | 基础类型 | 文本 / 数字 / 真假 |
interface Foo { ... } | 对象结构合同 | 必须长这样 |
name?: string | 可选字段 | 有最好,没有也行 |
'a' | 'b' | 联合类型 | 只准是这几个值之一(单选题) |
Promise<T> | 异步结果 | "过会儿给你的 T"(外卖单) |
async / await | 异步语法 | 等外卖到了再干下一步 |
(input: string) => void | 函数类型 | 收 string、不返回的函数 |
Context | 本框架核心类型 | "总插座板",L05 讲 |
pnpm run build 把 src/*.ts 编译到 lib/;开发时 tsx 可直跑源码。改源码 → 重新 build → 产物在 lib/。package.json 的 scripts 给常用命令起短名字:
"scripts": {
"build": "pnpm run -r build", // 递归让每个子包各自 build
"test": "vitest run" // 用 vitest 跑测试
}
pnpm run build = 执行引号里的原始命令,相当于通讯录昵称。完整清单见 命令速查表。
node -v 查版本,低于 22.19 去 nodejs.org 装 LTS。pnpm -v,不存在则 npm install -g pnpm(npm 随 Node 自带)。package.json,数 scripts 段有几个"昵称",对照 命令速查表。pnpm install 做了什么?@deepseek-ai 这段包名前缀叫什么?