在简单的角度应用程序上运行browserify时出现问题

时间:2016-09-25 04:42:33

标签: angularjs node.js browserify

我正在尝试使用node / npm / browserify构建我的角度应用程序。 ./app/controllers,./app/directives,./app/services基本上都有index.js文件,而这些文件又需要()js文件!下面是根js文件,即public / index.js。

require('./app/controllers/');
require('./app/directives/');
require('./app/services/');

var app = angular.module('myApp', ['ngRoute'])

app.config(function($routeProvider) {
    $routeProvider
    .when("/movie/:movieId", {
        template: require('./views/movie.html'),
        controller: 'MovieCtrl as movie'
    })
    .when("/movie/:movieId/scene/:sceneId", {
        template: require('./views/scene.html'),
        controller: 'SceneCtrl as scene'
    });
});

module.exports = app;

现在运行下面的命令后,我确实得到了一个bundle.js,

  

browserify public / index.js -o release / bundle.js

但是,bundle.js中的以下行会引发错误“Uncaught ReferenceError:app is not defined”

app.controller('MainCtrl', function ($route, $routeParams, $location, MyFactory) {

现在,我假设因为在index.js中指定了var app,它应该可以在MainCtrl.js中访问。有人可以建议我如何使这项工作?

-----添加更多信息------ app / controllers / index.js包含以下代码: -

require('./MainCtrl.js')
require('./MovieCtrl.js')
require('./SceneCtrl.js')

MainCtrl.js包含以下代码: -

app.controller('MainCtrl', function ($route, $routeParams, $location, MyFactory) {
    //...
})

2 个答案:

答案 0 :(得分:0)

我不知道你的代码中的哪一行......这个问题并不清楚,但无论如何:

  

现在,我假设因为在index.js中指定了var app,它应该可以在MainCtrl.js中访问。

这种假设是错误的。当你实例化你所包含的内容时,你需要传入一个你需要的引用。

例如......

var mainCtrl = new MainCtrl(app);

答案 1 :(得分:0)

好的,所以我有点理解发生了什么。 var app是本地的,在其他任何地方都无法访问。一旦我将应用程序设置为全局范围(这显然是一件可怕的事情!)和声明应用程序后所需的文件,它就有效了。这通常不是正确的做法,但正如我所说,这是一个非常初步的尝试。

app = angular.module('myApp', ['ngRoute'])

app.config(function($routeProvider) {
    $routeProvider
    .when("/movie/:movieId", {
        template: require('./views/movie.html'),
        controller: 'MovieCtrl as movie'
    })
    .when("/movie/:movieId/scene/:sceneId", {
        template: require('./views/scene.html'),
        controller: 'SceneCtrl as scene'
    });
});

require('./app/controllers/');
require('./app/directives/');
require('./app/services/');