求助:Ionic 3应用部署至IIS失败,遇两类报错需排查
我帮你拆解下这两个部署后出现的问题,都是Ionic 3部署到IIS时常见的坑,一步步来解决:
1. cordova.js 加载失败(404)的问题
这个问题的核心原因是:ionic build browser生成的代码里,依然保留了对cordova.js的引用,但这个文件是给Cordova原生环境用的,纯浏览器(IIS)环境下根本不存在,所以会报404。
解决方法有两种,选一种就行:
方法一:修改index.html的引用逻辑
找到src/index.html里的<script src="cordova.js"></script>,把它替换成条件加载的代码,只在Cordova原生环境下加载:<script> // 只在Cordova环境下加载cordova.js if (window.cordova) { const script = document.createElement('script'); script.src = 'cordova.js'; document.body.appendChild(script); } </script>修改后重新执行
ionic build browser,再部署www文件夹到IIS。方法二:使用生产环境构建
执行ionic build --prod browser来构建,生产构建会自动移除不必要的Cordova相关引用,避免这个404问题。
2. event-service.ts 第6行的 TypeError 问题
这个错误几乎都是RxJS版本不兼容或者语法使用错误导致的——Ionic 3默认依赖RxJS 5.x版本,但如果你的代码里用了RxJS 6.x的语法(比如直接用of()、from()而不是Observable.of()),或者package.json里不小心安装了RxJS 6.x,就会触发这个错误。
解决步骤:
- 先看
event-service.ts第6行的代码,比如如果是类似Observable.of(...)或者某个操作符的调用,检查是不是用了RxJS 6的写法。比如在RxJS 5里,创建Observable是Observable.of(data),而RxJS 6里是of(data)且需要单独导入。如果是这种情况,把代码改成RxJS 5的写法:// 错误写法(RxJS 6) import { of } from 'rxjs'; of('test'); // 正确写法(RxJS 5) import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/of'; Observable.of('test'); - 检查
package.json里的rxjs版本,确保是5.x(比如5.5.11),如果是6.x,执行以下命令回退版本:npm install rxjs@5.5.11 --save - 重新构建项目后再部署到IIS。
额外的IIS部署注意点
除了上面两个问题,还要确认IIS的基础配置:
- 确保IIS已经启用了静态文件服务(在IIS管理器的功能视图里找“静态文件”,如果没启用就添加);
- 设置网站的默认文档为
index.html,否则IIS可能找不到入口页面; - 如果你的路由是Ionic的哈希路由(默认是),不需要额外配置,如果是HTML5路由,需要在IIS里配置URL重写规则,避免刷新页面时404。
内容的提问来源于stack exchange,提问作者Umer Waheed
相关产品推荐
相关产品推荐

