gpt4 book ai didi

javascript - 使用 Browserify 可变地加载 AngularJS 模块

转载 作者:行者123 更新时间:2023-11-29 19:35:45 25 4
gpt4 key购买 nike

我正在尝试使用 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 应用程序所需的其余文件( Controller 、服务、指令等),可能需要包含任意数量的文件。这很容易硬编码,例如:

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 文件加载到应用程序中?

最佳答案

我最终得到了一个我目前满意的解决方案。它涉及为每种类型都有一个主模块:app.controllersapp.services 等。它们看起来像这样:

var angular = require('angular');

module.exports = angular.module('app.controllers', []);

// Define the list of controllers here
require('./example.js');

其中 ./example.js 是格式的 Controller :

'use strict';

var controllersModule = require('./_index');

/**
* @ngInject
*/
function ExampleCtrl() {

// ViewModel
var vm = this;

vm.title = 'Test Title';
vm.number = 1234;

}

controllersModule.controller('ExampleCtrl', ExampleCtrl);

对所有 Controller 、服务、指令等重复此过程,然后将其加载到 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));

});

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

关于javascript - 使用 Browserify 可变地加载 AngularJS 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25209534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com