это - Как вставить номер сборки или метку времени во время сборки в AngularCLI




angular material (3)

Я хочу, чтобы в моем приложении Angular2 была метка времени или номер сборки, чтобы я мог сказать, использует ли пользователь старую кэшированную версию или нет.

Как это сделать с AngularCLI в Angular2 во время компиляции / сборки AOT?


  1. Установить plugin npm install replace-in-file --save-dev
  2. Добавьте в prod environment новое свойство src / environment / environment.prod.ts

    export const environment = {
      production: true,
      version: '{BUILD_VERSION}'
    }
    
  3. Добавьте файл сборки replace.build.js в корневой каталог вашей папки.

    var replace = require('replace-in-file');
    var buildVersion = process.argv[2];
    const options = {
      files: 'src/environments/environment.prod.ts',
      from: /{BUILD_VERSION}/g,
      to: buildVersion,
      allowEmptyPaths: false,
    };
    
    try {
      let changedFiles = replace.sync(options);
      console.log('Build version set: ' + buildVersion);
    }
    catch (error) {
      console.error('Error occurred:', error);
    }
    
  4. добавить скрипты в package.json

    "updateBuild": "node ./replace.build.js"
    
  5. Используйте environment.version в вашем приложении

  6. Перед сборкой звоните npm run updateBuild -- 1.0.1

PS. Вы всегда должны помнить, что {BUILD_VERSION} никогда не фиксируется.

PS. Я написал немного лучшее решение в своем блоге

PS.3, как @ julien-100000 упомянул, вы не должны фиксировать environment.prod.ts с обновленной версией. Обновление версии должно происходить только в процессе сборки. И никогда не должно быть совершено.


Возможно, это хорошее решение для кого-то .. https://medium.com/@amcdnl/version-stamping-your-app-with-the-angular-cli-d563284bb94d

Он описывает, как использовать ваши git-данные и использовать в качестве номера сборки последний коммит-хеш.

Добавив шаг postinstall в файл package.json, вы получите файл при запуске сценария установки.


Нет необходимости устанавливать replace-in-file или выполнять какие-либо действия, упомянутые @VolodymyrBilyachat.

Простое решение: использование угловых сред

Просто внутри вашей желаемой среды. *. Ts file (для получения дополнительной информации о средах читайте angular-2-and-environment-variables ) требуется package.json следующим образом:

export const environment = {
    version: require('../package.json').version
};

Затем в среде импорта вашего приложения:

import { environment } from '../environments/environment';

И у вас есть environment.version . Если вы не cannot find name 'require' , прочтите этот ответ

Больше информации

Примечание. Как упоминается в комментариях @VolodymyrBilyachat, он будет включать ваш файл package.json в окончательный файл пакета.





angular-cli