2016-06-16 4 views
2

У меня есть проект, созданный и поддерживаемый с помощью algular-cli. Я хочу иметь доступное значение внутри классов проекта номера версии (возможно, из package.json) и увеличенного номера сборки (каждый раз, когда я делаю ng build или каждый раз, когда ng serve делает это). Как я могу это достичь? Заранее спасибо.Есть ли способ получить номер сборки и версии внутри класса проекта

+0

Я думаю, что текущая версия проекта находится в угловом-cli.json, однако я не знаю, как получить доступ к нему из приложения –

ответ

1

Мне удалось достичь того, чего я хотел. Может быть, это было бы интересно кому-то.

Я подклассы MyAngular2App из Angular2App в angular-cli-build.js и переопределен метод read из BroccoliPlugin. Он называется каждый раз, когда происходит сборка. Но была и другая проблема: если я обновил app/src/version.ts, брокколи-наблюдатель вызвал еще один раунд сборки ... Я пробовал разные решения, пытался исключить этот файл из часов и т. Д. Без успеха. Поэтому я решил это более «системным» способом. Переместил файл version.ts из папки src и сделал символическую ссылку на своем месте. Symlink не обновляется, когда выполняется исходный файл.

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' 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^