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

ES模块语法下如何正确导入自定义JS模块?

ES模块语法下如何正确导入自定义JS模块?

首先得说清楚你遇到报错的核心原因:ES模块的import语句是静态解析的——它会在代码执行前就被预处理,没办法直接用变量(比如你拼接的__dirname)作为导入路径,这就是为什么会出现"unexpected identifier __dirname"的错误。

针对你的场景(date.js和当前文件在同一目录),其实有个最省心的解决办法,根本不用折腾__dirname——直接用相对路径导入就行:

import date from './date.js';

这个写法完全符合ES模块规范,而且简洁明了,同一目录下的文件用./开头的相对路径就能直接定位到。

如果之后你遇到需要动态生成路径的场景(比如根据不同环境加载不同模块),可以用ES模块提供的动态导入函数import(),它支持传入变量拼接的路径,但要注意它返回的是Promise,需要用async/await或者.then()来处理:

import { fileURLToPath } from 'url';
import { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// 用async函数包裹,或者在支持顶层await的环境中直接使用
async function loadDateModule() {
  const { default: date } = await import(__dirname + "/date.js");
  // 在这里使用date模块
}

loadDateModule();

最后再提个关键前提:确保你的项目根目录下的package.json里已经设置了"type": "module",这样Node.js才会把你的文件当作ES模块来解析,否则还是会按CommonJS的规则处理,容易引发其他问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:24:32