在r.js优化之后$ injector:modulerr,但之前没有

时间:2013-11-08 19:18:01

标签: angularjs requirejs r.js

我正在使用require.jsr.js进行优化。预优化,我有:

// MainCtrl.js
define(function () {
    return ["$scope", function ($scope) { console.log($scope); }];
});

// main.js
require.config({                                                                
    shim: {                                                                     
        angular: {                                                              
            exports: "angular",                                                 
        },                                                                      
    },                                                                          
    paths: {                                                                    
        angular: "lib/angular.min",                                             
    },                                                                          
});
require(["angular", "MainCtrl"], function (ng, MainCtrl) {
    console.log(ng);
    var app = ng.module("myapp", []);
    app.controller("MainCtrl", MainCtrl);
});

我的HTML很简单;它只有ng-app=myapp中的<html>ng-controller=MainCtrl上的<body>

当我像这样运行应用程序时,一切似乎都有效。我得到console.log的{​​{1}}似乎是ng对象。然后,我从angular获取console.log的{​​{1}}。没问题。

运行$scope并使用缩小的MainCtrl后,我收到错误,事情不再有效。我跑r.js

main.js

现在当我访问r.js -o build.js时出现错误:

  

未捕获错误:[$ injector:modulerr]   未定义   未捕获的TypeError:无法调用未定义的方法'module'

  1. 似乎表示角度没有正确加载或其他东西。它不能向// build.js ({ appDir: "public", baseUrl: "js", dir: "dist", fileExlusionRegExp: /^(r|build\.js)$/, optimize: "uglify2", optimizeCss: "standard", modules: [{ name: "main" }], paths: { angular: "lib/angular.min", }, }) 注入某些内容,但它没有依赖项。不是index.html或其他任何
  2. myapp现在未定义,即使它之前已正确ngRoute。这也会导致第二个错误
  3. ng中的angular未被调用。由于前一行出错,因此并不是一个巨大的惊喜。 但是,如果我将console.log更改为MainCtrl,则不会发生ng错误并调用angular,但undefined来自app.controller console.log 仍未未被调用。
  4. 我唯一的猜测是角度被缩小两次(我已经使用angular.min.js然后MainCtrl再次缩小它)。我能解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

shim documentation中,建议:

  

您应该使用mainConfigFile构建选项指定文件在哪里找到shim配置。否则优化器将不知道shim配置。另一种选择是在构建配置文件中复制shim配置。

这可能导致angular的垫片不在构建文件中。