You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

生产构建后okta-auth-js抛出Uncaught TypeError: Super expression must either be null or a function错误,应用无法加载求助

解决okta-auth-js生产构建后出现的Uncaught TypeError: Super expression must either be null or a function错误

这个错误我之前处理过好几次,大概率是Okta相关依赖的版本不兼容,或者生产构建时的打包优化破坏了Okta库的类继承逻辑。结合你的环境信息,给你几个可行的解决方案:

1. 调整Okta依赖版本,确保兼容性

@okta/okta-react 6.0.0对@okta/okta-auth-js的版本要求是^4.7.0 || ^5.0.0,但部分小版本之间可能存在隐性冲突。你当前用的@okta/okta-auth-js 5.2.2可能和React 16.13.0搭配时在生产构建出问题,建议:

  • 降级@okta/okta-auth-js到5.1.1(这个版本我之前搭配React 16.x和okta-react 6.x验证过没问题)
  • 或者升级到@okta/okta-auth-js 5.4.x(更稳定的后期小版本)

执行命令修改版本:

# npm
npm install @okta/okta-auth-js@5.1.1 --save
# yarn
yarn add @okta/okta-auth-js@5.1.1

2. 配置构建工具,确保Okta包被正确转译

生产构建时,很多项目会排除node_modules下的包不做Babel转译,但Okta的部分库使用了未完全转译的ES6类语法,在旧版React环境下可能被打包工具破坏。你需要修改Webpack或Babel配置,让@okta开头的包被纳入转译范围:

如果是自定义Webpack配置,修改loader规则:

module.exports = {
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        // 排除node_modules,但包含@okta的包
        exclude: /node_modules\/(?!@okta)/,
        use: 'babel-loader'
      }
    ]
  }
};

如果用Create React App且没 eject,可以用craco来修改配置,在craco.config.js里添加:

module.exports = {
  babel: {
    loaderOptions: {
      exclude: /node_modules\/(?!@okta)/
    }
  }
};

3. 检查并清理重复依赖

有时候node_modules里会存在多个版本的@okta/okta-auth-js,导致类继承时找不到正确的父类构造函数。你可以执行以下命令查看依赖树:

# npm
npm ls @okta/okta-auth-js
# yarn
yarn list @okta/okta-auth-js

如果发现重复版本,用以下命令清理并重新安装:

# npm
rm -rf node_modules package-lock.json
npm install
# yarn
rm -rf node_modules yarn.lock
yarn install

4. 临时禁用生产构建的部分优化

如果以上方法都没效果,可以尝试禁用生产构建的source map和部分压缩优化,看看是不是打包工具的压缩逻辑导致的问题:
修改package.json里的build脚本:

"scripts": {
  "build": "GENERATE_SOURCEMAP=false react-scripts build"
}

先从版本调整开始试,这是最常见的解决路径,大部分情况下调整完版本就能解决问题。

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

火山引擎 最新活动