有没有办法在项目的课程中获得构建和版本号

时间:2016-06-16 08:54:00

标签: typescript angular-cli

我有一个用algular-cli创建和维护的项目。我希望在版本号的项目类中有一个可访问的值(可能来自package.json)和增加的内部版本号(每次ng build或每次ng serve执行时)。我怎样才能做到这一点?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我设法实现了我想要的目标。可能这对某人来说很有意思。

我从MyAngular2App中的Angular2App继承了angular-cli-build.js并覆盖了BroccoliPlugin的方法read。每次构建发生时都会调用它。但还有另一个问题 - 如果我更新了app/src/version.ts西兰花观察者引发了另一轮构建...... 我尝试了不同的解决方案,试图将这个文件从监视等中排除,但没有成功。所以我用更“系统”的方式解决了这个问题。将文件version.ts移出src文件夹并在其位置上创建了符号链接。原始文件执行时不会更新符号链接。

angular-cli-build.js

'use strict';

var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
var fs = require('fs');

class MyAngular2App extends Angular2App {
    constructor(project, inputNode, options) {
        super(project, inputNode, options);
    }

    read(x) {
        var _ver = require('./build_version.js');
        _ver.build++;
        _ver.version = _ver.x + '.' + _ver.y + '.' + _ver.z + '.' + _ver.build;
        console.log(" Build version: " + _ver.version);

        var fsErr = function (err) {
            if (err) {
                return console.log(err);
            }
        };

        var ver = "exports.x = '" + _ver.x + "';\n" +
            "exports.y = '" + _ver.y + "';\n" +
            "exports.z = '" + _ver.z + "';\n" +
            "exports.build = " + _ver.build + ";\n";
        fs.writeFile("build_version.js", ver, fsErr);

        ver = "export const version = {\n    major: " + _ver.x + ",\n    minor: " + _ver.y + ",\n    patch: " + _ver.z + ",\n    build: "
            + _ver.build + ",\n    text: '" + _ver.version + "'\n};\n";
        fs.writeFile("version.ts", ver, fsErr);

        return super.read(x);
    }

}

module.exports = function (defaults) {
    return new MyAngular2App(defaults, {
        vendorNpmFiles: [
            'systemjs/dist/system-polyfills.js',
            'systemjs/dist/system.src.js',
            'zone.js/dist/**/*.+(js|js.map)',
            'es6-shim/es6-shim.js',
            'reflect-metadata/**/*.+(ts|js|js.map)',
            'rxjs/**/*.+(js|js.map)',
            '@angular/**/*.+(js|js.map)',
            'underscore/underscore-min.js',
            'stompjs/lib/stomp.min.js',
            'moment/moment.js'
        ]
    });
};

build_version.js

exports.x = '0';
exports.y = '7';
exports.z = '3';
exports.build = 2818;

version.ts

export const version = {
    major: 0,
    minor: 7,
    patch: 3,
    build: 2818,
    text: '0.7.3.2818'
};