Javascript 为什么我的AngularJS+;RequireJS应用程序未通过grunt contrib RequireJS生成?

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'

我有我的申请的src。我用AngularJS。我使用RequireJS作为模块加载器。我使用Grunt作为任务运行器。当我使用src运行应用程序时:一切都很好。当我用Grunt构建应用程序时,应用程序不工作。我在控制台中没有错误

我注意到的主要问题是:我的代码(我的应用程序代码:app.js和
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'
}