Angular5升级至Angular6后出现Auth0相关global未定义错误求助
这个问题我之前帮不少开发者解决过,本质是Angular 6+使用的Webpack 4不再默认注入global全局变量,而你用的auth0-lock旧版本依赖这个变量,所以才会抛出Uncaught ReferenceError: global is not defined的错误。下面给你几个可行的解决办法:
解决方法一:在polyfills.ts中添加全局变量映射
这是最直接快速的方案,在项目根目录的src/polyfills.ts文件末尾添加以下代码:
(window as any).global = window;
这段代码会把浏览器环境的window对象赋值给global变量,让auth0-lock的代码能找到它需要的全局标识。
解决方法二:通过Angular CLI配置全局变量映射
如果更倾向于在构建配置层面解决问题,可以修改项目根目录的angular.json文件(Angular 6+采用该配置文件,旧版是.angular-cli.json),在build配置的options中添加globals字段:
"build": { "builder": "@angular-devkit/build-angular:browser", "options": { // 保留你原本的其他配置 "scripts": [], "globals": { "global": "window" } } }
这个配置会告诉Webpack在打包时自动将global变量映射到window对象,从构建层面消除依赖问题。
可选方案:升级相关依赖版本
你当前使用的auth0-lock@11.6.1是比较老旧的版本,后续的auth0-lock版本已经修复了对global变量的强依赖问题。同时注意angular2-jwt已经更名为@auth0/angular-jwt,更适配Angular 6+版本。可以尝试升级依赖:
- 先卸载旧依赖:
npm uninstall angular2-jwt auth0-js auth0-lock
- 安装适配新版本:
npm install @auth0/angular-jwt auth0-js@latest auth0-lock@latest
⚠️ 注意:升级后需要调整代码以适配新依赖的API,比如@auth0/angular-jwt的使用方式和旧版angular2-jwt有差异,建议参考官方的迁移文档调整。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

