使用generator-ngdoc生成gulp-angular文档时遇[$injector:nomod]错误
[$injector:nomod]模块找不到的问题 我之前也碰到过一模一样的问题!这个错误本质是生成的文档页面没法正确加载你的appModule模块,大概率是文档环境没有引入项目的核心依赖或者模块定义文件。下面是我亲测有效的排查和解决步骤:
1. 检查dgeni配置的资源加载列表
首先要确保dgeni的配置文件(一般是docs.config.js这类文件)里,已经把Angular核心文件、你的appModule定义文件都加入到资源加载队列中。如果这些文件没被加载,文档页面的Angular环境自然找不到你的模块。
示例配置代码:
module.exports = function(config) { // 把项目依赖和核心文件加入文档资源 config.prependToPackage('assets', [ 'bower_components/angular/angular.js', // Angular核心库 'src/app/app.module.js', // 定义appModule的文件 'src/app/**/*.js' // 项目所有组件、服务等文件(按需调整路径) ]); };
2. 确认ngdoc注释的模块声明正确
检查你组件(指令、控制器、服务等)的ngdoc注释,确保@name字段里的模块名和实际项目的模块名完全一致,不能有拼写错误。
示例正确的注释:
/** * @ngdoc directive * @name appModule.directive:myCustomComponent * @description 自定义组件的功能描述 */ angular.module('appModule').directive('myCustomComponent', function() { // 组件逻辑 });
3. 验证文档页面的脚本加载顺序
打开生成的docs文件夹里的组件页面源码,查看<script>标签的加载顺序:必须保证先加载Angular核心库,再加载appModule定义文件,最后加载各个组件/服务文件。
如果顺序不对,调整dgeni配置里assets数组的顺序——prependToPackage是按数组顺序依次添加资源的,排在前面的会先被加载。
4. 补充模块依赖的资源文件
如果你的appModule依赖了其他第三方模块(比如ui-router、ngResource),也要把这些依赖的JS文件加入到dgeni的assets列表中,否则appModule初始化时会因为找不到依赖模块而失败,最终也会触发[$injector:nomod]错误。
示例补充依赖后的配置:
config.prependToPackage('assets', [ 'bower_components/angular/angular.js', 'bower_components/angular-ui-router/release/angular-ui-router.js', // 第三方依赖 'src/app/app.module.js', 'src/app/**/*.js' ]);
5. 清理缓存后重新生成文档
有时候旧的文档缓存会导致异常,先手动删除整个docs文件夹,再重新运行生成文档的gulp命令(比如gulp docs),确保生成的是全新的文档文件。
内容的提问来源于stack exchange,提问作者radtelbi

