Angular 8迁移至9 Universal版本失败 报require.resolve错误
Angular 9 Universal 迁移异常记录
触发场景
- 项目从Angular 8 Universal版本向Angular 9 Universal版本执行迁移操作时,流程中断失败。
- 异常在
@nguniversal/express-engine包内置的9.x版本升级Schematics执行阶段触发,现场截图提示信息与下述堆栈内容完全对应。
完整错误堆栈
[error] TypeError: require.resolve is not a function at SchematicImpl.<anonymous> (E:\B2C-NG-9\b2c\node_modules\@nguniversal\express-engine\schematics\migrations\update-9\index.js:42:44) at Generator.next (<anonymous>) at E:\B2C-NG-9\b2c\node_modules\@nguniversal\express-engine\schematics\migrations\update-9\index.js:20:71 at new Promise (<anonymous>) at __awaiter (E:\B2C-NG-9\b2c\node_modules\@nguniversal\express-engine\schematics\migrations\update-9\index.js:16:12) at E:\B2C-NG-9\b2c\node_modules\@nguniversal\express-engine\schematics\migrations\update-9\index.js:38:26 at MergeMapSubscriber.project (C:\Users\YOURTR~1\AppData\Local\Temp\angular-cli-packages-YWauXm\node_modules\@angular\cli\node_modules\@angular-devkit\schematics\src\rules\call.js:75:24) at MergeMapSubscriber._tryNext (C:\Users\YOURTR~1\AppData\Local\Temp\angular-cli-packages-YWauXm\node_modules\@angular\cli\node_modules\rxjs\internal\operators\mergeMap.js:67:27) at MergeMapSubscriber._next (C:\Users\YOURTR~1\AppData\Local\Temp\angular-cli-packages-YWauXm\node_modules\@angular\cli\node_modules\rxjs\internal\operators\mergeMap.js:57:18) at MergeMapSubscriber.Subscriber.next (C:\Users\YOURTR~1\AppData\Local\Temp\angular-cli-packages-YWauXm\node_modules\@angular\cli\node_modules\rxjs\internal\Subscriber.js:66:18)
根因定位
- 报错核心为
require.resolve方法不可用,本质是Angular Schematics的沙箱运行环境中,未向迁移脚本注入原生Node.js CommonJS模块的require.resolve能力。 - 直接触发点为
@nguniversal/express-engine的9版本迁移脚本第42行代码,该脚本运行在Angular CLI 9.x的隔离沙箱中,直接调用了上下文中不存在的require.resolve方法。
内容的提问来源于stack exchange,提问作者james stevens
相关产品推荐
相关产品推荐

