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

如何根据JavaScript运行时(Node/Deno/Bun)导入对应模块?

根据JS运行时条件导入模块的实用方案

下面给你几个能根据Node、Deno、Bun不同运行时导入对应模块的方法:

1. 动态导入+运行时检测

静态import没法直接放在条件语句里,但可以用动态import()函数结合环境判断来实现,这是最直接的方式:

let MyLib;
// 检测Bun环境
if (typeof Bun !== 'undefined') {
  MyLib = await import('./mylib-bun.js');
} 
// 检测Deno环境
else if (typeof Deno !== 'undefined') {
  MyLib = await import('./mylib-deno.js');
} 
// 检测Node环境
else if (typeof process !== 'undefined' && process.release.name === 'node') {
  MyLib = await import('./mylib-node.js');
}

// 之后就能正常使用模块了
MyLib.default.doSomething();

注意:动态import返回Promise,所以代码要放在async函数里,或者用.then()处理。

2. 封装统一入口模块

如果多个地方都要用到这个模块,不如单独写一个入口文件做统一处理,其他地方直接导入这个入口就行:
比如创建mylib.js:

let lib;
if (typeof Bun !== 'undefined') {
  lib = await import('./mylib-bun.js');
} else if (typeof Deno !== 'undefined') {
  lib = await import('./mylib-deno.js');
} else if (typeof process !== 'undefined' && process.release.name === 'node') {
  lib = await import('./mylib-node.js');
}

// 导出模块的内容,保持接口一致
export default lib.default;
export const { MyFunction } = lib;

其他文件里直接导入:

import MyLib, { MyFunction } from './mylib.js';

3. 用package.json条件导出(Node/Bun支持)

如果是开发npm包,或者在Node、Bun环境里,可以用package.json的条件导出功能,直接配置不同环境对应的文件:

{
  "exports": {
    "bun": "./mylib-bun.js",
    "deno": "./mylib-deno.js",
    "node": "./mylib-node.js",
    "default": "./mylib-node.js"
  }
}

之后直接导入包名或者相对路径,运行时会自动匹配对应的文件:

import MyLib from './mylib';

Deno需要额外配置import map或者启用相关标志来识别这种条件导出。

4. Deno专属导入映射

Deno支持通过deno.json配置导入映射,专门指定Deno环境下的模块路径:

{
  "imports": {
    "./mylib": "./mylib-deno.js"
  }
}

Node和Bun则可以用各自的配置方式(比如Node的条件导出、Bun兼容package.json配置)来分别处理。

目前没有原生的import runtime=Deno { MyFunction } from "./mylib-deno.js"这种语法,上面这些都是当前实际开发中能用的方案。

内容的提问来源于stack exchange,提问作者Alex Shaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:54:19