Angular 14生产构建部署IIS报错Unexpected token求助
问题描述
最近将项目从Angular 13升级到Angular 14,执行ng build --configuration production命令生成部署包后,发布到IIS出现页面无法正常显示的问题,浏览器控制台提示「Unexpected token」错误。但执行不带--production参数的ng build命令生成的包正常可用。
项目的package.json配置如下:
{ "name": "knesset-website-app", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, "private": true, "dependencies": { "@angular/animations": "^14.0.6", "@angular/cdk": "^14.1.0", "@angular/cli": "^14.0.6", "@angular/common": "^14.0.6", "@angular/compiler": "^14.0.6", "@angular/core": "^14.0.6", "@angular/forms": "^14.0.6", "@angular/localize": "^14.0.6", "@angular/platform-browser": "^14.0.6", "@angular/platform-browser-dynamic": "^14.0.6", "@angular/router": "^14.0.6", "@ngx-translate/core": "^14.0.0", "@ngx-translate/http-loader": "^7.0.0", "@progress/kendo-angular-buttons": "^8.0.0", "@progress/kendo-angular-common": "^3.1.0", "@progress/kendo-angular-dateinputs": "^7.0.1", "@progress/kendo-angular-dialog": "^7.1.2", "@progress/kendo-angular-dropdowns": "^7.0.2", "@progress/kendo-angular-excel-export": "^5.0.1", "@progress/kendo-angular-grid": "^7.2.2", "@progress/kendo-angular-icons": "^2.0.1", "@progress/kendo-angular-inputs": "^9.0.3", "@progress/kendo-angular-intl": "^4.1.0", "@progress/kendo-angular-l10n": "^4.0.0", "@progress/kendo-angular-label": "^4.0.0", "@progress/kendo-angular-layout": "^7.1.0", "@progress/kendo-angular-pager": "^4.0.1", "@progress/kendo-angular-pdf-export": "^4.0.0", "@progress/kendo-angular-popup": "^5.0.0", "@progress/kendo-angular-progressbar": "^3.0.0", "@progress/kendo-angular-tooltip": "^4.0.1", "@progress/kendo-angular-treeview": "^7.1.0", "@progress/kendo-data-query": "^1.6.0", "@progress/kendo-drawing": "^1.16.3", "@progress/kendo-licensing": "^1.2.2", "@progress/kendo-svg-icons": "^0.2.0", "@progress/kendo-theme-default": "latest", "@types/jquery": "^3.5.5", "@videogular/ngx-videogular": "^5.0.1", "bootstrap": "^4.6.0", "bootstrap-v4-rtl": "^4.6.0-2", "core-js": "^2.5.4", "dashjs": "^4.3.0", "font-awesome": "^4.7.0", "hls.js": "^1.1.5", "jquery": "^3.6.0", "ng-recaptcha": "^10.0.0", "ngx-device-detector": "^2.1.1", "popper.js": "^1.12.3", "primeicons": "^4.1.0", "primeng": "^10.0.3", "rxjs": "~6.6.6", "scriptjs": "^2.5.9", "tslib": "^2.4.0", "zone.js": "~0.11.4" }, "devDependencies": { "@angular-devkit/build-angular": "^14.0.6", "@angular/compiler-cli": "^14.0.6", "@angular/language-service": "^14.0.6", "@types/core-js": "^2.5.5", "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.3", "@types/node": "^12.11.1", "codelyzer": "^0.0.28", "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", "karma": "^6.3.17", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "protractor": "~7.0.0", "ts-node": "~7.0.0", "tslint": "~6.1.0", "typescript": "~4.6.3" } }
可能的解决方向
- 第三方依赖版本不兼容:你的
primeng版本是10.0.3,这个版本仅支持Angular 11及以下版本,和Angular 14完全不兼容。生产构建时的优化压缩会暴露这种兼容性问题,而开发模式下可能未触发相关代码执行。建议将primeng升级到兼容Angular 14的版本(比如14.x系列),同时同步升级primeicons到对应版本。 - 检查生产构建的优化配置:打开项目的
angular.json,查看production配置下的optimization、buildOptimizer、terserOptions等参数,确认是否开启了过于激进的压缩选项。可以尝试临时关闭optimization重新构建,看是否还报错,逐步排查是哪个优化环节出了问题。 - 清理依赖缓存:删除项目根目录下的
node_modules文件夹和package-lock.json文件,执行npm install重新安装所有依赖,避免旧版本依赖残留导致的冲突。 - 分析scripts.js内容:对比开发构建和生产构建生成的
scripts.js文件,找到生产版中出现Unexpected token的位置,定位是哪个第三方库或自定义代码存在未被正确转译的ES6+语法,针对性处理。 - IIS MIME类型配置:确保IIS中已正确配置JS文件的MIME类型(
application/javascript),虽然开发版正常,但生产压缩后的文件可能因MIME类型错误导致浏览器解析异常。
内容的提问来源于stack exchange,提问作者Tomer Mugdasi
相关产品推荐
相关产品推荐

