Javascript 为什么我的AngularJS+;RequireJS应用程序未通过grunt contrib RequireJS生成?
我有我的申请的src。我用AngularJS。我使用RequireJS作为模块加载器。我使用Grunt作为任务运行器。当我使用src运行应用程序时:一切都很好。当我用Grunt构建应用程序时,应用程序不工作。我在控制台中没有错误 我注意到的主要问题是:我的代码(我的应用程序代码:app.js和Javascript 为什么我的AngularJS+;RequireJS应用程序未通过grunt contrib RequireJS生成?,javascript,angularjs,build,requirejs,grunt-contrib-requirejs,Javascript,Angularjs,Build,Requirejs,Grunt Contrib Requirejs,我有我的申请的src。我用AngularJS。我使用RequireJS作为模块加载器。我使用Grunt作为任务运行器。当我使用src运行应用程序时:一切都很好。当我用Grunt构建应用程序时,应用程序不工作。我在控制台中没有错误 我注意到的主要问题是:我的代码(我的应用程序代码:app.js和js/下的文件)没有出现在grunt任务设置中设置的输出文件中。另外,我不认为AngularJS有什么问题 主配置文件: require.config({ paths: { 'angular'
js/
下的文件)没有出现在grunt任务设置中设置的输出文件中。另外,我不认为AngularJS有什么问题
主配置文件:
require.config({
paths: {
'angular' : '../components/angular/angular',
/* etc..... */
'jquery': '../components/jquery/dist/jquery',
'application': './app'
},
shim: {
/* etc */
application: {
deps: ['angular']
},
angular: {
exports : 'angular'
}
},
baseUrl: '/js'
});
require(['application', 'angular', 'ngRoute', 'bootstrap' /* ngRoute and bootstrap from etc :) */], function (app) {
app.init();
});
app.js中的我的应用程序是:
define([
'require', 'angular', 'main/main', 'common/common'
], function (require) {
'use strict';
var angular = require('angular');
var app = angular.module('myApp', ['ngRoute', 'main', 'common']);
app.init = function () {
angular.bootstrap(document, ['myApp']);
};
app.config(['$routeProvider',
function ($routeProvider) {
$routeProvider
./* ... some code */
}
]);
return app;
});
我在body
标记的末尾添加了主RequireJS配置文件:
<script type="text/javascript" src="components/requirejs/require.js" data-main="js/bootstrap.js"></script>
我没有优化,所以我在输出文件中得到了约11k行代码
正如我所说主要问题是:输出文件中没有AngularJS代码和应用程序代码。
为什么??我正确设置了mainConfigFile。问题在RequireJS配置文件中?但是一切都很好,当我在src上运行我的应用程序时。如果你能提供你得到的准确的错误输出,那就更好了。以及从何处获得(在构建过程中从浏览器控制台或终端)
现在,我将建议一些可能对您的案例有所帮助的调整
angular: {
exports : 'angular'
}
这里您已经将angular.js
导出到全局局部变量中(在每个require
和define
块中)
通过执行var angular=require('angular')
您可能在app.js
模块中异步重写angular
变量
对于添加到中的'require'
,定义块,因为r.js
总是在第一步读取要加载的模块,然后合并到单个文件中。这可能会混淆r.js
与将requireJS
合并到自身中
建议对你的app.js
进行此调整:
define([//删除了'require',因为不需要,它已经是全局的,可以在任何地方使用
“角度”、“主/主”、“普通/普通”
],函数(){
"严格使用",;
//var angular=require('angular');//这是一个非常常见的错误。您不会以这种方式调用angular,因为requireJS与commonJS不同。
var-app=angular.module('myApp',['ngRoute','main','common']);
app.init=函数(){
引导(文档,['myApp']);
};
app.config(['$routeProvider',
函数($routeProvider){
$routeProvider
./*…一些代码*/
}
]);
返回应用程序;
});
最后但并非最不重要的一点data main=“js/bootstrap.js”
我认为它应该是js/main.js
或打字错误
编辑在定义
块和角度
局部变量中添加了对'require'
的解释。谢谢您的回答。正如我在问题中提到的:我在控制台或任何地方都不会遇到任何错误。关于您的代码:您删除了require依赖项和require调用,对吗?晚上我会试试,但我不确定它是否有用。至少我现在不明白它会有什么帮助。正如我说的:我有一个症状:我在输出文件中没有看到任何提到AngularJS或我的源代码。另外,关于bootstrap.js。我将主配置文件命名为-bootstrap.js,因此数据主是js/bootstrap.js
理解为js/bootstrap.js
,因为在您的问题中,您将其称为main config:)---关于调整,它是为了避免覆盖angular
变量。定义var angular=require('angular')
时。我会更新我的答案,以便更好地解释。现在真的很好的解释。我会尽快试一试。反正还是投了赞成票。谢谢,我解决了这个问题。我开始使用uglify2优化。现在我有350 kb的项目src`s、libs和r.js lib。
angular: {
exports : 'angular'
}