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

从node_modules获取变量遇'unexpected token import'错误求助

解决Node.js中require ES模块文件出现'unexpected token import'的问题

我来帮你搞定这个模块导入的问题!你遇到的unexpected token import错误,本质是模块系统不兼容导致的——你用CommonJS的require()去加载了一个用ES模块语法(import/export)编写的文件,而Node.js默认会把.js文件当作CommonJS处理,碰到ES模块的语法就会报错。

下面给你几个可行的解决方案,按推荐程度排序:

方案一:用动态import()异步加载ES模块

CommonJS环境中可以通过异步的import()函数来加载ES模块,这是Node.js官方支持的兼容方式,不用改项目配置,只需要调整代码写法:

// 用async/await处理异步导入
async function fetchUserData() {
  try {
    // 导入目标模块
    const userModule = await import('path/of/required/file/in/node_modules');
    // 获取你需要导出的变量(替换成实际的变量名)
    const targetUserData = userModule.yourExportedVariable;
    
    // 这里就可以使用获取到的用户数据了
    console.log('获取到的用户数据:', targetUserData);
  } catch (err) {
    console.error('加载模块出错:', err);
  }
}

// 调用函数
fetchUserData();

这种方法的好处是不用改动项目整体的模块配置,适合临时兼容单个ES模块文件的场景。

方案二:将整个项目切换为ES模块

如果你的项目本身可以全面切换到ES模块,这是更彻底的解决方案:

  1. 在项目根目录的package.json中添加"type": "module":
{
  "name": "your-project-name",
  "type": "module",
  // 其他配置...
}
  1. 把代码中的require()全部替换为ES模块的import语法:
// 直接用import导入目标模块
import { yourExportedVariable } from 'path/of/required/file/in/node_modules';

// 使用获取到的变量
console.log('用户数据:', yourExportedVariable);

注意:切换为ES模块后,CommonJS特有的变量(比如__dirname、__filename)不能直接使用,如果需要可以通过import.meta.url手动计算。

方案三:转译目标模块(不推荐)

你也可以用Babel等工具把node_modules中的目标文件转译为CommonJS语法,但这种方法不建议——因为修改node_modules的文件会在依赖更新时被覆盖,而且可能破坏模块原本的逻辑,引发其他潜在问题。

另外关于Keystone获取用户数据的问题,虽然目前没有官方方案,但你可以多关注Keystone的社区讨论或者GitHub Issues,说不定有其他开发者分享了可行的自定义实现思路,不过先解决模块导入的问题,才能继续推进用户数据的获取~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:43:04