0

我正在使用 Webjars 将 AngularJS 导入我的 Web 项目。由于某种原因,即使我在我的 main.js 中引用了 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 像这样加载 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

4

2 回答 2

0

尝试添加 enforceDefine: true,

于 2015-06-16T11:34:23.977 回答
0

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

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

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

如果您将 .js 添加到路径中,则此 .js 已被删除并且 .min 仍然存在。

于 2015-06-17T08:42:50.410 回答