我正在使用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似乎ng是angular对象的那个。然后,我从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] 未定义未捕获的类型错误:无法调用未定义的方法“模块”
- 似乎表明角度没有正确加载或其他东西。它不能向 注入东西
myapp,但它没有依赖关系。没有ngRoute或任何东西 ng现在是未定义的,即使它angular之前是正确的。这也导致了第二个错误console.loginMainCtrl没有被调用。这并不奇怪,因为上一行有错误。 但是,如果我更改ng为错误不会发生angular并被调用,但from仍然没有被调用。undefinedapp.controllerconsole.logMainCtrl
我唯一的猜测是 angular 被缩小了两次(我已经在使用 angular.min.js 然后r.js再次缩小它)。我可以做些什么来解决这个问题吗?