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

Node.js ES6模块环境下jsonwebtoken导入失败问题求助

解决ES模块环境下jsonwebtoken导入及模块找不到的问题

我之前也遇到过一模一样的问题,咱们一步步来排查解决:

1. 先修复导入语句的低级错误

你代码里的导入语句有个很容易忽略的问题:

import jwt from ' jsonwebtoken'

注意引号里的前导空格!Node.js会把' jsonwebtoken'(带空格)当成完整的包名去查找,自然找不到正确的jsonwebtoken包。先把空格去掉,改成:

import jwt from 'jsonwebtoken';

2. 确认jsonwebtoken版本支持ES模块

早期版本的jsonwebtoken确实只支持CommonJS,但从v8.5.0开始已经添加了ES模块导出支持。你可以先检查当前版本:

npm list jsonwebtoken

如果版本低于v8.5.0,直接更新到最新版即可:

npm install jsonwebtoken@latest

3. 动态导入兼容方案(如果更新版本后仍有问题)

如果因为某些原因无法更新版本,或者更新后还是有兼容性问题,可以用ES模块的动态导入来绕开:

// 顶级await(需要package.json中type为module,你已经设置了)
const { sign } = await import('jsonwebtoken');

class sampleClass {
  static func(user) {
    return sign(
      { _id: user._id, name: user.name },
      'sample key',
      { expiresIn: '7d' }
    );
  }
}

或者在函数内部使用:

class sampleClass {
  static async func(user) {
    const { sign } = await import('jsonwebtoken');
    return sign(
      { _id: user._id, name: user.name },
      'sample key',
      { expiresIn: '7d' }
    );
  }
}

4. 长期方案:切换到原生支持ES模块的JWT库

如果不想在兼容性上折腾,推荐使用jose——这是一个完全基于ES模块编写的JWT库,符合现代JavaScript标准,功能覆盖jsonwebtoken的所有需求,还支持更多现代加密算法。示例代码:

npm install jose
import { SignJWT } from 'jose';

class sampleClass {
  static async func(user) {
    return await new SignJWT({ _id: user._id, name: user.name })
      .setProtectedHeader({ alg: 'HS256' })
      .setExpirationTime('7d')
      .sign(new TextEncoder().encode('sample key'));
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:17:26