top
技術

本題

題名の通り、Nuxt.js v3 jsonwebtoken を使うと does not provide an export named <メソッド名> というエラーが発生する問題の解決方法を記載します。

軽く調べただけですが、どうやら Nuxt.js v3 は dev モードで動作中はブラウザ上でサーバー側をモックしているようで、Node.js 上で動作する前提の jsonwebtoken と相性が悪いようです。

かといって、毎回 「nuxi build & nuxi preview」 しようとしても、CommonJS と ES Modules の違いによる面倒なエラーが別に発生してしまいます。

解決方法

解決方法は2通り。 前者の方が簡単です。

  • nuxt.config.ts 内に、jsonwebtoken のトランスパイル設定を追加する

    // nuxt.config.ts
    export default defineNuxtConfig({
        devtools: { enabled: true },
    +   build: {
    +       transpile: ['jsonwebtoken']
    +   }
    });
    
  • 別の jwt モジュールを使う (ex. jose)

エラー内容

ERROR  [worker reload] [worker init] The requested module 'file://~/node_modules/jsonwebtoken/index.js' does not provide an export named 'sign'

  import { sign, verify } from '~/node_modules/jsonwebtoken/index.js';
  ^^^^
  SyntaxError: The requested module '~/node_modules/jsonwebtoken/index.js' does not provide an export named 'sign'  at ModuleJob._instantiate (node:internal/modules/esm/module_job:132:21)
  at async ModuleJob.run (node:internal/modules/esm/module_job:214:5)
  at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
  at async loadESM (node:internal/process/esm_loader:34:7)
  at async handleMainPromise (node:internal/modules/run_main:113:12)

参考