AngularJS 具有不同自定义的应用程序

AngularJS application with different customizations

我得到了我们使用 AngularJS 创建的 "framework"。它允许建立问卷系统,它有许多不同的参数来控制框架的行为。

我们使用这个框架创建了 2 个项目:projectAprojectB。这些项目之间的 差异 设置和资产 (css, img, ...)
两个项目都存储在 git 中的同一分支上,只有 config 文件定义了项目自定义。
我想不出如何使用 Gulp 或其他方式从同一代码源轻松部署这两个项目的最佳方式。

以下是我暂时得到的一些想法:
1. 在代码中同时包含设置文件和图像(例如 logo_A.pnglogo_B.png),并在构建期间使用 Gulp
选择合适的 2. 创建文件夹 customizations,其中包含 2 个子文件夹 AB,以及相应的设置和资产
3. 为每个项目安装脚本(不是代码)创建单独的存储库,这些脚本将完成所有工作

这种情况下最好的方法是什么?

最后,最简单易懂的解决方案是创建额外的 custom 文件夹。

资产

除了正常的应用程序文件,我现在得到 custom 文件夹,其中包含 2 个子文件夹:AB,每个子文件夹都包含 assets(css , img) 仅对应于具体项目。
gulp 中,我使用了允许传递参数的 yargs 模块。从输入中读取项目名称后,我可以在 custom 文件夹中查看是否有我感兴趣的资源(我刚刚将 custom 文件夹添加到资源路径中)。

var customPath = './custom/' + app.name;
exports.paths = {
  web: {
    //Resources
    styles: ['./app/**/*.css', './app/**/*.scss', customPath + '/**/*.css', customPath + '/**/*.scss'],
...

构建任务的调用现在如下所示:gulp build --name A

配置

对包含常量的 AngularJS 配置文件做了另一件事。我使用了 gulp-ng-config 插件,它允许动态构建 AngularJS 配置(常量)文件。在我的流程中,首先我检查 custom 配置文件是否存在于我使用的 custom 文件夹中,如果不存在,我将使用应用程序中的默认配置文件。

var getAppScripts = function() {
    return $.eventStream.merge(
        gulp.src(config.paths.web.scripts)
        .pipe($.jshint())
        .pipe($.jshint.reporter('jshint-stylish'))
        //.pipe($.eslint())
        .pipe($.eslint.format()),
        getAppConfig())
            .pipe($.angularFilesort());
};

var getAppConfig = function() {
    var configFile = config.paths.web.custom + "/app.config.yaml";
    if (fs.existsSync(configFile)) {
        return gulp.src(configFile)
            .pipe($.ngConfig(config.app.name, {
                parser: 'yml',
                createModule: false
            }));
    }
    else {
        return gulp.src(config.paths.web.config);
    }
}