我正在使用require.js
与r.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'
// 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
或其他任何myapp
现在未定义,即使它之前已正确ngRoute
。这也会导致第二个错误ng
中的angular
未被调用。由于前一行出错,因此并不是一个巨大的惊喜。 但是,如果我将console.log
更改为MainCtrl
,则不会发生ng
错误并调用angular
,但undefined
来自app.controller
console.log
仍未未被调用。我唯一的猜测是角度被缩小两次(我已经使用angular.min.js然后MainCtrl
再次缩小它)。我能解决这个问题吗?
答案 0 :(得分:1)
在shim
documentation中,建议:
您应该使用mainConfigFile构建选项指定文件在哪里找到shim配置。否则优化器将不知道shim配置。另一种选择是在构建配置文件中复制shim配置。
这可能导致angular
的垫片不在构建文件中。