You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Monorepo中如何在Deno里引用本地Node.js/npm模块?

在Deno中引用本地Node.js共享模块的方法

问题背景

我有一个包含Next.js和Supabase的Monorepo项目,希望构建一个用于类型和Schema定义的共享模块,让Next.js和Supabase代码库能共同使用。在Next.js这类Node.js项目里,我只需执行npm install ../lib,并确保lib/package.json中声明了"name": "myApp-lib",就能通过import { X } from "myApp-lib"轻松引用这个本地模块。

那在Deno里该怎么用类似的方式引用本地Node.js模块呢?

项目目录结构

myApp/
  client/
   src/
     components/
       - contact.tsx # 共享Schema的使用者

  supabase/
    functions/
      email_new_query/
        - index.ts # Deno模块,需要引用共享Schema

  lib/
    dist/
      index.js # 共享Schema的导出文件
      index.d.ts # 类型定义文件

解决方案

Deno对Node.js模块的处理逻辑和npm不同,但可以通过以下几种方式实现本地模块的便捷引用:

1. 直接使用相对路径引用

这是最直接的实现方式,在Deno文件(比如supabase/functions/email_new_query/index.ts)中,用相对路径指向lib/dist下的目标文件:

// 引用JS导出文件
import { X } from "../../../../lib/dist/index.js";

// 引入类型定义
/// <reference path="../../../../lib/dist/index.d.ts" />

注意:Deno的相对路径需要从当前文件位置出发,精准定位到目标文件。

2. 通过导入映射(Import Map)设置别名

如果不想写冗长的相对路径,可以用Deno的导入映射配置模块别名,模拟Node.js里的模块名引用方式:

  • 在项目根目录创建import_map.json文件:
{
  "imports": {
    "myApp-lib/": "./lib/dist/"
  }
}
  • 在Deno文件中通过别名引用:
import { X } from "myApp-lib/index.js";
/// <reference path="myApp-lib/index.d.ts" />
  • 运行Deno函数时,需要指定导入映射文件:
deno run --import-map=../../../../import_map.json index.ts

如果是Supabase函数,可在supabase/functions/email_new_query目录下创建deno.json配置文件,让Supabase自动读取导入映射:

{
  "importMap": "../../../../import_map.json"
}

3. 打包为Deno兼容模块(可选)

如果想让引用体验更贴近Node.js,可以把lib模块打包成Deno兼容格式:

  • 在lib目录下添加deno.json,指定导出入口和类型文件:
{
  "exports": "./dist/index.js",
  "types": "./dist/index.d.ts"
}
  • 之后在Deno文件中可通过本地路径直接引用该模块配置:
import { X } from "../path/to/lib/deno.json";

这种方式适合需要长期维护、多场景复用的共享模块。

注意事项

  • Deno默认严格遵循ES模块规范,确保lib/dist/index.js使用export语法导出内容;如果是CommonJS格式的模块,需要添加--compat-node参数运行:
deno run --compat-node index.ts
  • 类型定义文件(.d.ts)可通过/// <reference path="..." />语法直接引入,Deno会自动识别并提供类型提示。

内容的提问来源于stack exchange,提问作者Ahmad Raza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:15:57