在Heroku上部署angularjs应用程序:找不到模块角度

时间:2014-03-05 11:17:52

标签: angularjs heroku deployment

我正在尝试在heroku上部署我的angularjs应用程序。 我按照heroku给出的步骤。 但是当我看着日志时,我有这个:

  

/app/app/scripts/app.js:3 2014-03-05T11:05:09.262151 + 00:00 app [web.1]:   angular.module('angularuiprojectApp',[   2014-03-05T11:05:09.262151 + 00:00 app [web.1]:^   2014-03-05T11:05:09.266533 + 00:00 app [web.1]:ReferenceError:angular   未定义2014-03-05T11:05:09.266533 + 00:00 app [web.1]:at   宾语。 (/app/app/scripts/app.js:3:1)   2014-03-05T11:05:09.266533 + 00:00 app [web.1]:在Module._compile   (module.js:456:26)2014-03-05T11:05:09.266533 + 00:00 app [web.1]:at   Object.Module._extensions..js(module.js:474:10)   2014-03-05T11:05:09.266533 + 00:00 app [web.1]:在Module.load   (module.js:356:32)2014-03-05T11:05:09.266533 + 00:00 app [web.1]:at   Function.Module._load(module.js:312:12)   2014-03-05T11:05:09.266533 + 00:00 app [web.1]:at   Function.Module.runMain(module.js:497:10)   2014-03-05T11:05:09.266533 + 00:00 app [web.1]:启动时   (node.js:119:16)2014-03-05T11:05:09.266533 + 00:00 app [web.1]:at   node.js:902:3 2014-03-05T11:05:09.742460 + 00:00 app [web.1]:   /app/app/scripts/app.js:3

我不明白为什么Heroku不知道角度。

这是我app.js的代码:

angular.module('angularuiprojectApp', [
  'ngCookies',
  'ngResource',
  'ngSanitize',
  'ngRoute','ui.bootstrap'
])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

我的procfile内容是:

  

web:node app / scripts / app.js

如果您有任何想法...... 提前谢谢。

5 个答案:

答案 0 :(得分:2)

app.js是一个配置AngularJS的文件。它不是像express这样的网络服务器。您需要一台Web服务器来为Angular应用程序提供服务。为此,请创建一个新的web.js文件,以启动为app或您的dist目录提供服务的网络服务器。

您需要使用npm安装expressgzippo才能完成这项工作。

以下是web.js提供app文件夹的示例:

'use strict';

var gzippo = require('gzippo');
var express = require('express');
var nodeApp = express();

nodeApp.use(express.logger('dev'));
nodeApp.use(gzippo.staticGzip('' + __dirname + '/app'));
nodeApp.listen(process.env.PORT || 5000);

顺便说一下,不推荐提供app文件夹,您应该提供使用dist命令生成的grunt文件夹。查看this buildpack我写的是在heroku上部署角度应用程序,如果你使用grunt和bower来构建应用程序,它将为你处理一切。

答案 1 :(得分:2)

Heroku在地址中使用http读取CDN时遇到问题。因此,在您的项目中,从您的所有CDN网址中删除http

例如:

如果您有:

<pre>http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></pre>

将其替换为:

<pre>//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></pre>

答案 2 :(得分:0)

我有一个node.js应用程序在本地工作正常,但角度不会在Heroku上工作。我必须在index.html中为heroku更改此行以加载角度。我换了

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js"></script>

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular.min.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular-route.min.js" type="text/javascript" charset="utf-8"></script>

它有效!

更新: 看起来问题出在&#39; http:&#39; src的一部分,而不是初始链接。不知道为什么heroku无法处理那里的http,但只是摆脱它。

答案 3 :(得分:0)

如果删除链接的http部分,则允许服务器在http或https之间进行选择。这适用于所有CDN。

一般情况下,我建议使用此方法确定链接以//whatever.com而不是http://whatever.com开头,因为您永远不知道链接何时会更改为https,反之亦然。

答案 4 :(得分:0)

在heroku上托管你的angular js web应用程序时,问题出现在CDN上。 Heroku在使用 http

读取CDN时遇到问题

因此,请从角度CDN中删除http 并将其写为

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></script>