模块与 Import Maps

使用 ESM、JSR、npm 和 deno.json imports 管理清晰的模块边界

Deno-first 代码使用标准 ESM,本地导入写真实扩展名:

import { add } from "./math.ts";
import { join } from "jsr:@std/path";
import React from "npm:react";

项目中不要在每个文件散落版本号。用 deno add 写入 deno.jsonimports

deno add jsr:@std/path npm:react
{
  "imports": {
    "@std/path": "jsr:@std/path@^1.1.2",
    "react": "npm:react@^19.2.0",
    "@/": "./src/"
  }
}

然后使用稳定别名:

import { join } from "@std/path";
import { loadConfig } from "@/config.ts";

选择顺序

  1. Web 标准或 Deno 内置 API;
  2. JSR 上的 TypeScript-first 包,尤其 @std/*
  3. npm 包,用 npm:deno add 管理;
  4. 仅在确有需要时直接使用 HTTPS import,并锁定来源。

计算得到的动态导入不属于静态模块图:加载本地路径需要 --allow-read,加载远程 URL 需要 --allow-import。这与普通静态 import 不同。

官方参考:ModulesImport maps example

输入关键词搜索全部文档。