执行grunt serve:dist时Angular应用实例化失败,toastr模块不可用
解决
grunt serve:dist时Toastr模块加载失败的问题 我碰到过好几个类似的情况,结合你提到的「本地开发正常、生产构建报错,同事同款代码能跑」的细节,大概率是依赖版本或者构建配置的差异在搞鬼,给你几个针对性的排查和解决步骤:
1. 把Toastr依赖版本固定成和同事完全一致
你的bower.json里toastr的依赖可能带了^或~这类版本范围符,导致你和同事安装的toastr版本不一样。试试:
- 先删掉本地的
bower_components文件夹 - 找同事要他的
bower.json或者bower.lock文件,把toastr的版本改成和他完全一致的具体版本(比如"toastr": "2.1.4",具体看同事的版本) - 重新跑
bower install
2. 确认Grunt构建脚本没漏打包Toastr
生产构建(serve:dist)会把依赖打包成优化后的文件,很可能你的配置里漏了toastr的JS/CSS:
- 打开
Gruntfile.js,找usemin、concat或者wiredep相关的配置块 - 检查toastr的JS文件(比如
bower_components/toastr/toastr.js)有没有被包含在生产构建的打包列表里 - 再看看HTML里的构建注释标记(比如
<!-- build:js({.tmp,app}) scripts/vendor.js -->),确保toastr的引入标签被包裹在正确的注释块里,这样构建工具才会把它打包进去
3. 核对Toastr的Angular模块名
虽然概率不高,但不同版本的toastr可能改了Angular模块的注册名:
- 打开
bower_components/toastr/toastr.js,搜angular.module,看看模块名是不是'toastr' - 如果是别的名字(比如
'ngToastr'),那你代码里的模块依赖注入也要跟着改
4. 清理构建缓存再试
有时候旧的构建缓存会残留问题文件,先清掉再构建:
grunt clean grunt serve:dist
5. 同步所有依赖的锁定版本
如果你们用了bower.lock或者npm的package-lock.json,直接把同事的这些锁定文件拷贝过来,然后重新安装所有依赖,这样能保证你和同事的依赖版本100%一致
要是以上步骤都试过还是不行,可以把你Gruntfile.js里和构建打包相关的配置(比如usemin、wiredep部分)贴出来,或者对比下同事的Grunt配置有没有差异,有时候构建脚本的小改动也会导致依赖打包失败。
内容的提问来源于stack exchange,提问作者Akash Panigrahi
相关产品推荐
相关产品推荐

