Angular 8升级至9后编译成功但浏览器无法渲染,报TypeError错误
问题分析
控制台报错Uncaught TypeError: Cannot read properties of undefined (reading 'plugins'),说明代码执行时grapesjs对象为undefined,无法访问其plugins属性。这大概率是Angular 9升级后,第三方库grapesjs的模块加载方式或兼容性出现了问题。
解决方案
1. 调整grapesjs的导入方式
Angular 9的模块解析逻辑与Angular 8存在差异,默认导入可能无法正确识别grapesjs的UMD导出。将导入语句修改为命名空间导入:
// variable.ts import {insertVariableCommand} from '../commands'; import * as grapesjs from 'grapesjs'; // 修改此处 export default grapesjs.plugins.add('insertVariables', (editor, options) => { // 原有代码保持不变 });
如果仍不生效,可以尝试在angular.json的scripts数组中直接引入grapesjs的本地脚本:
"scripts": [ "./node_modules/grapesjs/dist/grapesjs.min.js" ]
2. 安装grapesjs的TypeScript类型定义
当前package.json中未包含grapesjs的类型定义,可能导致导入时类型解析异常。执行以下命令安装类型包:
npm install @types/grapesjs --save-dev
同时在tsconfig.json中确保启用默认导入支持:
{ "compilerOptions": { "allowSyntheticDefaultImports": true } }
3. 重新执行依赖安装与ngcc处理
Angular 9的Ivy编译器需要ngcc处理第三方库的兼容性,可能之前的postinstall脚本未正确执行。执行以下步骤:
- 删除
node_modules文件夹和package-lock.json文件 - 重新安装依赖:
npm install - 手动执行ngcc:
npx ngcc
4. 验证grapesjs版本兼容性
当前使用的grapesjs@0.17.27可能与Angular 9的webpack 4.x存在兼容性问题。可以尝试切换到更稳定的版本测试:
# 降级到0.16.x稳定版 npm install grapesjs@~0.16.42 --save # 或升级到适配webpack 4的0.18.x版本 npm install grapesjs@~0.18.4 --save
内容的提问来源于stack exchange,提问作者SHAHZEB HASSAN
相关产品推荐
相关产品推荐

