Подтвердить что ты не робот

Как отобразить версию приложения в Angular?

Как отобразить версию приложения в угловом приложении? версия должна быть взята из файла package.json

{
  "name": "angular-app",
  "version": "0.0.1",
  ...
}

В угловой 1.x у меня есть этот HTML:

<p><%=version %></p>

В angular это не отображается как номер версии, а просто печатается как есть (<%=version %> вместо 0.0.1).

4b9b3361

Ответ 1

Если вы хотите использовать/показать номер версии в вашем угловом приложении, сделайте следующее:

Предпосылки:

  • Угловая структура файлов и папок, созданная с помощью Angular CLI

  • TypeScript 2.9 или более поздняя версия! (Поддерживается от Angular 6.1 и выше)

шаги:

  1. В вашем /tsconfig.app.json включите опцию resolJsonModule (после этого потребуется перезагрузка сервера):
    "compilerOptions": {
      ...
      "resolveJsonModule": true
      ...
  1. Затем в вашем компоненте, например, /src/app/app.component.ts используйте информацию о версии:
    import { version } from '../../package.json';
    ...
    export class AppComponent {
      public version: string = version;
    }

Также возможно выполнить шаг 2 в вашем файле environment.ts, делая информацию о версии доступной оттуда.

Спасибо @Ionaru и @MarcoRinck за помощь.

Это решение не будет включать содержимое package.json, только номер версии.
Протестировано с Angular8/Node10/TypeScript3.4.3.

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

Ответ 2

Если вы используете webpack или angular -cli (кто использует веб-пакет), вы можете просто потребовать package.json в своем компоненте и отобразить эту подсказку.

const { version: appVersion } = require('../../package.json')
// this loads package.json
// then you destructure that object and take out the 'version' property from it
// and finally with ': appVersion' you rename it to const appVersion

И тогда у вас есть свой компонент

@Component({
  selector: 'stack-overflow',
  templateUrl: './stack-overflow.component.html'
})
export class StackOverflowComponent {
  public appVersion

  constructor() {
    this.appVersion = appVersion
  }
}

Ответ 3

Попытка DyslexicDcuk ответ привела к cannot find name require

Тогда чтение раздела "Загрузка дополнительного модуля и другие расширенные сценарии загрузки" в https://www.typescriptlang.org/docs/handbook/modules.html помогло мне решить эту проблему. (Упоминается Гэри здесь fooobar.com/questions/231005/...)

Используйте декларацию ниже для запроса package.json.

declare function require(moduleName: string): any;

const {version : appVersion} = require('path-to-package.json');

Ответ 4

Используя опцию tsconfig --resolveJsonModule вы можете импортировать файлы json в Typescript.

В файле environment.ts:

import { version } from '../../package.json';

export const environment = {
    VERSION: version,
};

Теперь вы можете использовать environment.VERSION в вашем приложении.

Ответ 5

Хорошая идея объявить version как переменную окружения, чтобы вы могли использовать ее везде в своем проекте. (особенно в случае загрузки файлов для кэширования в зависимости от версии, eg yourCustomjsonFile.json?version=1.0.0)
Чтобы предотвратить проблемы безопасности (как упоминалось @ZetaPR), мы можем использовать этот подход (в комментарии @sgwatgit)
Вкратце: мы создаем файл yourProjectPath\PreBuild.js. Как это:

const path = require('path');
const colors = require('colors/safe');
const fs = require('fs');
const dada = require.resolve('./package.json');
const appVersion = require('./package.json').version;

console.log(colors.cyan('\nRunning pre-build tasks'));

const versionFilePath = path.join(__dirname + '/src/environments/version.ts');

const src = 'export const version = '${appVersion}';
';
console.log(colors.green('Dada ${colors.yellow(dada)}'));

// ensure version module pulls value from package.json
fs.writeFile(versionFilePath, src, { flat: 'w' }, function (err) {
if (err) {
    return console.log(colors.red(err));
}

console.log(colors.green('Updating application version         
${colors.yellow(appVersion)}'));
console.log('${colors.green('Writing version module to 
')}${colors.yellow(versionFilePath)}\n');
});

Вышеупомянутый фрагмент создаст новый файл /src/environments/version.ts который содержит константу с именем version и установит ее по извлеченному значению из файла package.json.

Чтобы запустить содержимое PreBuild.json при сборке, мы добавляем этот файл в раздел Package.json"scripts": {... }" как PreBuild.json ниже. Таким образом, мы можем запустить проект, используя этот код: npm start:

{
  "name": "YourProject",
  "version": "1.0.0",
  "license": "...",
  "scripts": {
    "ng": "...",
    "start": "node PreBuild.js & ng serve",
  },...
}

Теперь мы можем просто импортировать версию и использовать ее где угодно:

import { version } from '../../../../environments/version';
...
export class MyComponent{
  ...
  public versionUseCase: string = version;
}

Ответ 6

Я не думаю, что "Angle Bracket Percent" имеет какое-либо отношение к угловому. Вероятно, интерфейс к другому API, который вы не понимаете, используется в вашем предыдущем проекте.

Самое простое решение: просто введите номер версии вручную в свой HTML файл или сохраните его в глобальной переменной, если вы используете его в нескольких местах:

<script>
  var myAppVersionNumber = "0.0.1";
</script>
...
<body>
  <p>My App Version is: {{myAppVersionNumber}}</p>
</body>

Ваше более сложное решение: запустите шаг автоматизации сборки, который извлекает номер версии из вашего файла package.json, а затем перезаписывает ваш файл index.html(или файл js/ts), чтобы включить значение:

  • Можно просто импортировать или потребовать файл package.json, если вы работаете в среде, которая его поддерживает:

    var version = require("../package.json").version;

  • Это также можно сделать в bash script, который читает package.json и затем редактирует другой файл.

  • Вы можете добавить NPM script или изменить свой старт script, чтобы использовать дополнительные модули для чтения и записи файлов.
  • Вы можете добавить grunt или gulp к ваш конвейер, а затем используйте дополнительные модули для чтения или записи файлов.

Ответ 7

Typescript

import { Component, OnInit } from '@angular/core';
declare var require: any;

@Component({
  selector: 'app-version',
  templateUrl: './version.component.html',
  styleUrls: ['./version.component.scss']
})
export class VersionComponent implements OnInit {
  version: string = require( '../../../../package.json').version;

  constructor() {}

  ngOnInit() {

  }
}

HTML

<div class="row">
    <p class="version">{{'general.version' | translate}}: {{version}}</p>
</div>

Ответ 8

Упрощенное решение для пользователей с угловым кли.

Добавить declare module '*.json'; on src/typings.d.ts

А затем на src/environments/environment.ts:

import * as npm from '../../package.json';

export const environment = {
  version: npm.version
};

Готово :)

Ответ 9

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

Я использовал скрипт bash для изменения версии всего приложения. Следующий скрипт запросит у вас желаемый номер версии, и то же самое применяется во всем приложении.

#!/bin/bash
set -e

# This script will be a single source of truth for changing versions in the whole app
# Right now its only changing the version in the template (e.g index.html), but we can manage
# versions in other files such as CHANGELOG etc.

PROJECT_DIR=$(pwd)
TEMPLATE_FILE="$PROJECT_DIR/src/index.html"
PACKAGE_FILE="$PROJECT_DIR/package.json"

echo ">> Change Version to"
read -p '>> Version: ' VERSION

echo
echo "  #### Changing version number to $VERSION  ####  "
echo

#change in template file (ideally footer)
sed -i '' -E "s/<p>(.*)<\/p>/<p>App version: $VERSION<\/p>/" $TEMPLATE_FILE
#change in package.json
sed -i '' -E "s/\"version\"\:(.*)/\"version\"\: \"$VERSION\",/" $PACKAGE_FILE


echo; echo "*** Mission Accomplished! ***"; echo;

Я сохранил этот скрипт в файле с именем version-manager.sh в корне проекта, и в своем файле package.json я также создал скрипт для его запуска, когда необходимо изменить версию.

"change-version": "bash ./version-manager.sh"

Наконец, я могу просто изменить версию, выполнив

npm run change-version 

Эта команда изменит версию в шаблоне index.html, а также в файле package.json. Ниже приведены несколько скриншотов из моего существующего приложения.

enter image description here

enter image description here

enter image description here

enter image description here

Ответ 10

Вы можете прочитать package.json так же, как и любой другой файл, с http.get, например:

import {Component, OnInit} from 'angular2/core';
import {Http} from 'angular2/http';

@Component({
    selector: 'version-selector',
    template: '<div>Version: {{version}}</div>'
})

export class VersionComponent implements OnInit {

    private version: string;

    constructor(private http: Http) { }

    ngOnInit() {
        this.http.get('./package.json')
            .map(res => res.json())
            .subscribe(data => this.version = data.version);
    }
}

Ответ 11

При использовании Angular 2 с Typescript и Webpack вы также можете использовать (а не требовать):

import * as packageObject from '[relative path to]/package.json';

и чтобы получить номер версии, просто напишите:

packageObject.version 

Ответ 12

В nodejs Command promt C:\Users\Username > node -v это для версии nodejs, C:\Users\Username > npm -v это для версии npm.