-->

$喷油器:modulerr后r.js优化,而不是之前($injector:modulerr afte

2019-10-18 23:09发布

我使用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.logng这似乎是对angular的对象。 然后,我得到console.log$scopeMainCtrl 。 没问题。

运行后r.js并使用缩小的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我得到的错误:

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

  1. 似乎表明,角度不正确加载或东西。 它不能注入东西myapp ,但它没有依赖关系。 不ngRoute或任何
  2. ng现在不确定的,即使它是正确angular了。 这也导致了第二个错误
  3. console.logMainCtrl不叫。 不是一个巨大的惊喜,因为有上一行的错误。 但是 ,如果我改变ngangularundefined不会出现错误和app.controller被调用,但console.logMainCtrl 仍然不叫。

我唯一的猜测是,角被精缩两次(我已经使用angular.min.js然后r.js minifies一遍)。 我可以做任何事情来解决这个问题?

Answer 1:

shim文档 ,它表明:

您应该使用mainConfigFile构建选项来指定文件在哪里可以找到垫片配置。 否则,优化器将不知道垫片配置的。 另一种选择是复制的建造轮廓的垫片配置。

这可能是造成angular的垫片是从内置的文件不存在。



文章来源: $injector:modulerr after r.js optimization, but not before