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

关于Deno库在Node.js项目中导入及Deno开发TypeScript库供Node使用的技术问询

Deno开发的TypeScript库如何供Node.js开发者使用?

嘿,这个问题问得实在是太实用了!我之前也折腾过把自己用Deno写的TS库转到Node项目里用,踩了几个小坑后总结出几个靠谱的方案,给你详细说说:

最推荐:用Deno官方的dnt工具一键转换

Deno团队专门做了dnt(Deno to Node Transform)这个工具,就是为了解决Deno库转Node兼容包的问题。它能自动处理TypeScript转译、模块格式转换(CommonJS/ES模块都支持)、类型声明生成,甚至还能给Deno特有的API加垫片,简直是省心神器。

具体步骤大概是这样:

  1. 在你的Deno项目根目录新建一个build_npm.ts脚本,内容参考下面的模板:
    import { build } from "https://deno.land/x/dnt/mod.ts";
    
    await build({
      entryPoints: ["./mod.ts"], // 替换成你的库入口文件路径
      outDir: "./npm-dist", // 生成的Node包输出目录
      shims: {
        // 如果你的代码用到了Deno专属API(比如Deno.readFile),开启这个自动加垫片
        deno: true,
      },
      package: {
        // 这里填你的npm包信息,和普通package.json字段一致
        name: "your-awesome-library",
        version: "1.0.0",
        description: "用Deno写的TS库,Node也能轻松用",
        license: "MIT",
        main: "mod.js",
        types: "mod.d.ts",
      },
    });
    
    // 可选:把README、LICENSE这些文件复制到输出目录,方便npm发布
    await Deno.copyFile("README.md", "./npm-dist/README.md");
    await Deno.copyFile("LICENSE", "./npm-dist/LICENSE");
    
  2. 运行这个脚本:deno run -A build_npm.ts(-A是给足权限,因为要写文件)
  3. 进入生成的npm-dist目录,就可以像普通Node包一样发布到npm了:npm publish

这样Node开发者直接npm install your-awesome-library就能用,和他们平时用的npm包完全没区别,连类型提示都能正常工作。

手动适配:适合轻量无特殊依赖的库

如果你的库代码比较简单,完全没用到Deno专属的API(比如没调用Deno.*,也没用到Deno标准库的特殊模块),那手动改一改就能兼容Node:

  • 把导入路径换成Node支持的模块,比如把import { readTextFile } from "https://deno.land/std/fs/mod.ts"改成import { readFile } from "fs/promises"
  • 新建一个tsconfig.json,配置成Node兼容的编译选项:
    {
      "compilerOptions": {
        "target": "ES2020",
        "module": "CommonJS",
        "outDir": "./dist",
        "declaration": true,
        "strict": true
      },
      "include": ["src/**/*"]
    }
    
  • 用tsc编译成JS,然后写好package.json,发布到npm就行。

不过这个方法只适合小项目,要是用到了Deno特有的API,就得自己写垫片或者替换成Node的对应实现,比较麻烦。

临时方案:让Node开发者通过CDN直接导入

如果不想发布到npm,还可以让Node开发者用支持Deno模块的CDN直接导入你的库,比如:

// Node项目里的代码(需要把package.json的type设为module)
import yourLibrary from "https://esm.sh/https://deno.land/x/your-library/mod.ts";

这种方式适合快速试用,但生产环境不太推荐,毕竟依赖CDN的稳定性,而且没法离线使用。

小提醒

不管用哪种方法,最好在Deno和Node环境都跑一遍测试,确保兼容性。如果用到了Deno特有的API,一定要记得用垫片或者替换成Node的对应API,不然Node运行时会报错。

备注:内容来源于stack exchange,提问作者user5507535

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:42:47