javascript - Angular 构建无法在服务器上运行

标签 javascript angularjs yeoman

我正在尝试在服务器上运行我的 AngularJS 前端。我正在使用 Yeoman 来构建应用程序。我上传了非常基本的 hello world 应用程序,我得到了没有加载 JavaScript 的纯 HTML 文本。 Chrome 中的控制台是这样说的:

Error: Unknown provider: aProvider <- a
    at Error (<anonymous>)
    at http://../scripts/vendor/d10639ae.angular.js:2627:15
    at Object.getService [as get] (http://../scripts/vendor/d10639ae.angular.js:2755:39)
    at http://../scripts/vendor/d10639ae.angular.js:2632:45
    at getService (http://../scripts/vendor/d10639ae.angular.js:2755:39)
    at invoke (http://../scripts/vendor/d10639ae.angular.js:2773:13)
    at Object.instantiate (http://../scripts/vendor/d10639ae.angular.js:2805:23)
    at http://../scripts/vendor/d10639ae.angular.js:4620:24
    at update (http://../scripts/vendor/d10639ae.angular.js:13692:26)
    at http://../scripts/vendor/d10639ae.angular.js:8002:24 d10639ae.angular.js:5526

有人遇到同样的情况并且知道出路吗?

编辑:

'use strict';

yoAngApp.controller('MainCtrl',['$scope', '$window', function($scope, $window) {
    $scope.awesomeThings = [
        'HTML5 Boilerplate',
        'AngularJS',
        'Testacular'
    ];

    $scope.records = [{ title : 'one' }, { title : 'two' }, { title : 'three' }, { title : 'four' }];

    $scope.greet = function() {
        ($window.mockWindow || $window).alert('Hello ' + $scope.name);
    }
}]
);

最佳答案

我很确定您在生产服务器上使用过代码压缩器,对吗?

无论如何,folks from Angular Js made pretty clear如果使用不当,使用 minifier 可能会搞砸依赖注入(inject)。为什么会这样?看看:

依赖注入(inject)与代码压缩器

函数 MyController($scope, $log) { ... }

在上面的代码片段中,您正在使用隐式 DI。 Angular 看到变量 $scope 并尝试将它与任何托管依赖项相匹配。在此示例中,它将匹配到 $scope 对象。

然而,这在代码缩小后将不起作用,因为结果看起来像这样:

函数 a(b, c) { ... }

由于变量和函数名称被缩小了,Angular 无法知道“a”到底是什么。

解决方案

使用显式依赖注入(inject)配置。

var MyController = function($scope, $log) { ... }
MyController.$inject = ['$scope', '$log'];

在这个片段中,您定义了哪些依赖项应该通过将它们的名称数组附加到名为 $inject 的 Controller (或服务)的特殊属性来解决。现在 Angular 知道它应该解析 $scope 并将它作为第一个参数传递给 MyController。然后它将解析 $log 并将其作为第二个参数传递。 这一切都是可能的,因为压缩器不会修改字符串变量的内容。

关于javascript - Angular 构建无法在服务器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15496669/

相关文章:

angularjs - 使用 angularjs 将 UTC 转换为本地时间

javascript - 无法读取未定义的属性 'toLowerCase'

javascript - 'define' is not defined error on RequireJS & Webapp Yo generator

javascript - D3.js - JSON 数据数组将相同的数组元素绑定(bind)到所有内容

javascript - 单击 : anonymous vs named function behaviour 调用 jQuery 事件处理程序

javascript - Handlebars 预编译模板未使用 Grunt.js 命名

node.js - Yeoman for Angular,然后 "grunt serve"将无法启动

javascript - 解析大型 JSON 文件时页面卡住

javascript - Google map api,如何处理同一位置的所有标记(重叠标记)的标记悬停事件?

angularjs - 从浏览器中删除 yeoman 图像