1

我正在使用require.jswithr.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=myappin<html>ng-controller=MainCtrlon <body>

当我像这样运行应用程序时,一切似乎都正常。我得到了console.log似乎ngangular对象的那个。然后,我从console.log. 没问题。$scopeMainCtrl

运行r.js和使用 minified后main.js,我得到错误并且事情不再起作用。我跑r.js -o build.js

// 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我得到错误:

未捕获的错误:[$injector:modulerr] 未定义未捕获的类型错误:无法调用未定义的方法“模块”

  1. 似乎表明角度没有正确加载或其他东西。它不能向 注入东西myapp,但它没有依赖关系。没有ngRoute或任何东西
  2. ng现在是未定义的,即使它angular之前是正确的。这也导致了第二个错误
  3. console.loginMainCtrl没有被调用。这并不奇怪,因为上一行有错误。 但是,如果我更改ng为错误不会发生angular并被调用,但from仍然没有被调用。undefinedapp.controllerconsole.logMainCtrl

我唯一的猜测是 angular 被缩小了两次(我已经在使用 angular.min.js 然后r.js再次缩小它)。我可以做些什么来解决这个问题吗?

4

1 回答 1

1

shim文档中,建议:

您应该使用 mainConfigFile 构建选项来指定查找 shim 配置的文件。否则优化器将不知道 shim 配置。另一个选项是在构建配置文件中复制 shim 配置。

这可能导致angular构建文件中缺少 'shim。

于 2013-11-08T20:26:19.973 回答