angular.js加载而不是angular.min.js与requirejs

时间:2015-06-16 11:26:02

标签: javascript angularjs requirejs webjars

我正在使用Webjars将AngularJS导入到我的Web项目中。 出于某种原因,即使我引用了我的主要版本,AngularJS的缩小版本也不会被提供。我期待看到angular.min.js和angular-route.min.js被加载,但我看到了常规的angular.js和angular-route.js。我在这里做错了什么?

我的main.js:

'use strict';

requirejs.config({
  paths: {
    'angular': '../lib/angularjs/angular.min',
    'angular-route': '../lib/angularjs/angular-route.min',
    'async': '../lib/requirejs-plugins/src/async'
  },
  shim: {
    'angular': {
      exports : 'angular'
    },
    'angular-route': {
      deps: ['angular'],
      exports : 'angular'
    }
  }
});

require(['angular', './controllers', './directives', './filters', './services', 'angular-route','./places-autocomplete','async','./gmaps'],
    function(angular, controllers) {
        initialize();

        // Declare app level module which depends on filters, and services
        angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngRoute']).
        config(['$routeProvider', function($routeProvider) {
            ....
        }]);

        angular.bootstrap(document, ['myApp']);

    });

我的html加载需要像这样:

<script>
   @Html(org.webjars.RequireJS.getSetupJavaScript(routes.WebJarAssets.at("").url))
</script>
<script data-main="@routes.Assets.versioned("javascripts/main.js")"
        src="@routes.WebJarAssets.at(WebJarAssets.locate("require.min.js"))"></script>

以上的requirejs.config片段位于main.js

2 个答案:

答案 0 :(得分:0)

尝试添加 enforceDefine: true,

答案 1 :(得分:0)

我查看了requirejs的来源。这是我发现的:

requirejs将您在配置对象中定义的每个路径拆分为其组件(即目录,文件名和扩展名)。由于某种原因(节点模块命名约定),最后一个扩展名被删除。他们不会检查是否是'.js'。然后,此路径数组用于访问模块。没有插件,rquirejs只处理.js文件。如果nessecary,它会添加一个.js。

现在你可以看到你的例子中发生了什么。在第一步中,requirejs会删除.min扩展名。当它加载模块时,它加入路径组件并在末尾添加.js。然后它加载完整的模块而不是缩小版本。

如果在路径中添加.js,则会删除此.js并且.min仍然存在。