`
tobato
  • 浏览: 101790 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Angularjs部署Unknown provider: aProvider <- a

阅读更多
grunt 压缩代码后,部署发布出现下面的错误:

Error: [$injector:unpr] Unknown provider: aProvider <- a
http://errors.angularjs.org/1.2.22/$injector/unpr?p0=aProvider%20%3C-%20a
    at http://192.168.129.105/scripts/97d82a51.vendor.js:3073:20
    at http://192.168.129.105/scripts/97d82a51.vendor.js:3837:19
    at Object.c [as get] (http://192.168.129.105/scripts/97d82a51.vendor.js:3797:59)
    at http://192.168.129.105/scripts/97d82a51.vendor.js:3839:23
    at c (http://192.168.129.105/scripts/97d82a51.vendor.js:3797:59)
    at d (http://192.168.129.105/scripts/97d82a51.vendor.js:3808:62)
    at Object.e [as instantiate] (http://192.168.129.105/scripts/97d82a51.vendor.js:3814:96)
    at http://192.168.129.105/scripts/97d82a51.vendor.js:4464:38
    at http://192.168.129.105/scripts/97d82a51.vendor.js:8874:29
    at k (http://192.168.129.105/scripts/97d82a51.vendor.js:5157:57) 


错误原因: 压缩以后,没有告诉angular如何注入,因此angular无法进行动态注入

解决办法:
1.编写所有controller/service/xx的时候用数组注入(推荐这个方式)
angular.module('MainApp').directive('about', ['$rootScope',
  function ($rootScope) {
  }])


2.在写完controller/service/xx以后编写注入提示
AboutController.$inject = ['$scope'];


本文最牛叉的地方来了:
光是知道如何解决这个错误是不够的,压缩代码以后,我们需要知道哪里代码没有认真编写,从而造成了这个错误

解决流程:
第一步 修改Grunt编译脚本Gruntfie.js,加入
 uglify:{
      options : {
        beautify : true,
        mangle   : true //混淆变量名
      }
    },

让代码构建的时候混淆变量名,但是不破坏代码可读性

第二步 修改angular.js 找到function annotate(fn) 加入console.warn提示
function annotate(fn) {
  var $inject,
      fnText,
      argDecl,
      last;

  if (typeof fn === 'function') {
    if (!($inject = fn.$inject)) {
      $inject = [];
      if (fn.length) { 
        console.warn("此函数没有注入注解,将导致编译后运行错误:",fn);


这下编译以后再发布运行,除了能看到Unknown provider错误,还能马上看到哪里的代码出现了问题。


====================
Enjoy It!
====================
Tobato 2014-09-14
====================
1
0
分享到:
评论
1 楼 silentzone 2015-10-15  
吊爆·········

相关推荐

    Linux下的rpm详细用法

    rpm -qi &lt;package-name&gt; ``` 例如: ``` rpm -qimplayer ``` 3. **查询未安装的 rpm 包:** - 查看 rpm 包的信息而不安装: ``` rpm -qpipackage-file.rpm ``` 例如: ``` rpm -qpimplayer-1.0pre7try...

    get-volume-type.rar_volume type

    std::cout &lt;&lt; "驱动器 " &lt;&lt; driveStr &lt;&lt; ": 未知类型(" &lt;&lt; driveType &lt;&lt; ")" &lt;&lt; std::endl; break; } } } return 0; } ``` 在这个例子中,我们遍历了所有可能的驱动器,对每个存在的驱动器调用`GetDriveType`...

    VC判断本机驱动器属性源码

    std::cout &lt;&lt; "驱动器 " &lt;&lt; drive &lt;&lt; ": 类型未知" &lt;&lt; std::endl; break; case DRIVE_NO_ROOT_DIR: std::cout &lt;&lt; "驱动器 " &lt;&lt; drive &lt;&lt; ": 无根目录" &lt;&lt; std::endl; break; case DRIVE_REMOVABLE: std::cout...

    riscv32-unknown-elf-gcc-8.4.0_2.txz

    riscv32-unknown-elf-gcc 学习riscv 的必备工具,github 下载太慢,无需编译

    Maven使用tomcat8-maven-plugin插件.docx

    Maven 是一个流行的构建自动化工具,它可以帮助开发者自动完成项目的编译、测试、打包、部署等任务。 Tomcat 是一个流行的 Web 服务器,Maven 提供了一个插件 tomcat8-maven-plugin 来实现 Maven 项目与 Tomcat ...

    arm-unknown-linux-gnueabi.tar.gz

    本文将深入探讨使用Ubuntu16操作系统,通过crosstool-ng构建的针对ARM Cortex-A8处理器的交叉编译工具链"arm-unknown-linux-gnueabi.tar.gz"。这个工具链允许开发者在x86架构的主机上编译出适用于ARM架构的目标代码...

    riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz

    标题 "riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz" 暗示了这是一个针对RISC-V架构的交叉编译工具链,用于在64位Linux系统(基于Ubuntu 14)上构建未知目标系统的ELF二进制文件。...

    riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6.tar.gz

    《RISC-V架构下的交叉编译工具链:riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6详解》 在计算机科学领域,尤其是嵌入式系统开发中,交叉编译是一种常见的技术,它允许我们在一个平台上编译出适用...

    解决angularjs service中依赖注入$scope报错的问题

    错误信息:“Unknown provider: $scopeProvider &lt;- $scope &lt;- DutylogService”表明尝试注入的$scope服务无法被找到。这是因为$scope对象只存在于控制器的作用域内,它不适用于服务层,因为在服务层中没有与之对应的...

    获取就算计安装的服务信息

    default: std::cout &lt;&lt; "Unknown"; break; } std::cout &lt;&lt; std::endl; delete[] config; } int main() { SC_HANDLE scmHandle = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS); if (scmHandle ==...

    GTX示例工程,对GTX进行初步测试

    GTX示例工程 &lt;?xml version="1.0" encoding="UTF-8"?... &lt;spirit:name&gt;unknown&lt;/spirit:name&gt; &lt;spirit:version&gt;1.0&lt;/spirit:version&gt; MODELPARAM_VALUE.gt0_pll1_rxout_div"&gt;1&lt;/spirit:configurableElementValue&gt;

    springcloud项目,解决unknown问题

    在开发基于Spring Boot和Spring Cloud的应用程序时,经常会遇到各种挑战,其中之一就是“unknown”问题。这通常出现在IDEA环境中,意味着系统无法正确识别或解析某些依赖或配置。本篇文章将详细探讨这个问题,并提供...

    TNS-12541: TNS: 无监听程序 TNS-12560

    Client address: &lt;unknown&gt; ORA-609 : opiodr aborting process unknown ospid (4116_6104) 这时候朋友怀疑是不是监听器配置问题,就把原先的监听器删除重建了下,问题依然。 网上有个解决TNS-12535错误的案例...

    x86_64-unknown-linux-gnu-9.2.0.tar.gz

    标题 "x86_64-unknown-linux-gnu-9.2.0.tar.gz" 暗示了这是一个针对x86_64架构的Linux系统(通常为64位)的GCC(GNU Compiler Collection)交叉编译器的打包文件,版本号为9.2.0。这种工具允许开发者在非目标平台...

    clangd/libclang-11.0.0-x86_64-unknown-linux-gnu.tar.bz2

    标题中的“clangd/libclang-11.0.0-x86_64-unknown-linux-gnu.tar.bz2”是一个软件包,它包含了用于C和C++编程语言的Clang工具集的一部分,特别是libclang库。libclang是Clang项目的一个核心组件,提供了C API,允许...

    C++常用的编程关键字.md

    std::cout &lt;&lt; "Unknown"; } ``` ##### 4. `char` - **用途**:用于声明字符类型的变量。 - **示例**:`char c = 'A';` ##### 5. `const` - **用途**:用于定义常量,即其值在程序运行期间不可更改。 - **示例**...

    VC获取磁盘的控件信息

    std::wcout &lt;&lt; "可用空间: " &lt;&lt; freeBytesAvailable.QuadPart / (1024 * 1024) &lt;&lt; " MB\n"; std::wcout &lt;&lt; "总空间: " &lt;&lt; totalBytes.QuadPart / (1024 * 1024) &lt;&lt; " MB\n"; std::wcout &lt;&lt; "空闲空间: " &lt;&lt; ...

    qt qInstallMessageHandler 自定义消息输出示例

    std::cout &lt;&lt; timeString.toStdString() &lt;&lt; " - " &lt;&lt; context.file &lt;&lt; "(" &lt;&lt; context.line &lt;&lt; ") - " &lt;&lt; msg.toStdString() &lt;&lt; std::endl; } ``` 在这个示例中,我们创建了一个名为`customMessageHandler`的函数...

    riscv32-unknown-elf-gcc v8.2.0交叉编译工具链,第二部分

    riscv32-unknown-elf-gcc交叉编译工具链,基于riscv-gnu-gcc进行编译。 版本8.2.0. 工具链大小为340M,超出了240M的限制,分成了2个资源进行上传,需要将第一部分下载,然后放一起才可以解压。

    计算机软件-商业源码-实例74 查看驱动器类型.zip

    首先,我们需要包含`windows.h`头文件,然后使用`GetDriveType`函数传入驱动器号(通常是字母A到Z,代表从A盘到Z盘的物理驱动器)来获取类型。例如: ```cpp #include &lt;windows.h&gt; #include &lt;iostream&gt; int main()...

Global site tag (gtag.js) - Google Analytics