angular.js 使用 requirejs 加载而不是 angular.min.js

angular.js loaded instead of angular.min.js with requirejs

我正在使用 Webjars 将 AngularJS 导入到我的 Web 项目中。 出于某种原因,AngularJS 的缩小版本不会被提供,即使我在我的 main 中引用了那些。我期待看到加载 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 像这样加载 requirejs:

<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

尝试添加 enforceDefine: true,

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

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

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

如果您将 .js 添加到您的路径,则此 .js 将被删除,而 .min 仍然存在。