【问题标题】:Load AngularJS modules variably with Browserify使用 Browserify 可变地加载 AngularJS 模块
【发布时间】:2014-08-08 18:00:51
【问题描述】:

我正在尝试使用 AngularJS、Browserify 和 Gulp 构建样板。我让所有 Gulp 任务以及 Browserify 都能正常工作。我现在正试图找出为 Angular 应用程序加载所有必要文件的最佳方式。

我只用这三行代码来创建应用程序:

var angular = require('angular');
require('angular-ui-router');
angular.module('myApp', ['ui.router']);

然后我添加我的路由器逻辑:

angular.module('myApp').config(['$stateProvider', '$locationProvider', '$urlRouterProvider', require('./routes')]);

一切正常。但是,对于 Angular 应用程序所需的其余文件(控制器、服务、指令等),可能需要包含任意数量的文件。这很容易硬编码,例如:

angular.module('myApp').controller('IndexCtrl', require('./controllers/index'))

但我不想为我需要添加到应用程序的每个文件都硬编码这样的行。我首先研究使用fs 解析每个目录并以这种方式加载文件,但没有运气。我现在正在尝试使用以下格式的controllers/index.js 文件:

'use strict';

var controllers = [
  {
    'name': 'HomeCtrl',
    'path': './controllers/home'
  }
];

module.exports = controllers;

然后我尝试解析和加载文件:

require('./controllers/index').forEach(function(controller) {
  angular.module('myApp').controller(controller.name, require(controller.path));
});

这可以很好地解析 json 文件,但是当它尝试从文件中读取路径时出现 cannot find module 错误。

有没有更好的方法来使用 Browserify 将可变数量的 AngularJS 文件加载到应用程序中?

【问题讨论】:

    标签: javascript angularjs gulp browserify


    【解决方案1】:

    我最终提出了一个我目前满意的解决方案。它涉及为每种类型设置一个主模块:app.controllersapp.services 等。这些看起来像这样:

    var angular = require('angular');
    
    module.exports = angular.module('app.controllers', []);
    
    // Define the list of controllers here
    require('./example.js');
    

    其中./example.js 是格式的控制器:

    'use strict';
    
    var controllersModule = require('./_index');
    
    /**
     * @ngInject
     */
    function ExampleCtrl() {
    
      // ViewModel
      var vm = this;
    
      vm.title = 'Test Title';
      vm.number = 1234;
    
    }
    
    controllersModule.controller('ExampleCtrl', ExampleCtrl);
    

    对所有控制器、服务、指令等重复此过程,然后将其加载到main.js内的应用程序中:

    'use strict';
    
    var angular = require('angular');
    
    // angular modules
    require('angular-ui-router');
    require('./controllers/_index');
    require('./services/_index');
    require('./directives/_index');
    
    // create and bootstrap application
    angular.element(document).ready(function() {
    
      var requires = [
        'ui.router',
        'app.controllers',
        'app.services',
        'app.directives'
      ];
    
      angular.module('app', requires);
    
      angular.module('app').config(require('./routes'));
    
      angular.bootstrap(document, ['app']);
    
    });
    

    我的 Javascript 文件的 Gulp 任务现在看起来像这样:

    gulp.task('browserify', function() {
    
      var b = browserify({
        basedir: '.',
        entries: './app/js/main.js',
        debug: true,
        insertGlobals: true
      });
    
      b.transform({
        global: true
      }, ngAnnotate);
    
      b.transform({
        global: true
      }, uglifyify);
    
      b.bundle()
        .pipe(source('main.js'))
        .pipe(streamify(rename({suffix: '.min'})))
        .pipe(gulp.dest('build/js'))
        .pipe(refresh(lrserver));
    
    });
    

    这一切对我来说都很好,并且是相对模块化的!

    【讨论】:

      猜你喜欢
      • 2015-07-15
      • 1970-01-01
      • 2016-02-24
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 2016-11-14
      • 2019-04-23
      相关资源
      最近更新 更多