read from deploy app angular angular-cli

from - ¿Cómo incluir la revisión de git en la aplicación angular-cli?



deploy angular 6 heroku (5)

Fui con una versión modificada de Vilmantas Baranauskas.

src/index.base.html src/index.html a src/index.base.html y agregué un <meta name="revision" content=""> vacío dentro de HEAD

Ejemplo:

<head> <meta charset="utf-8"> <title>MySuperAwesome Angular</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="revision" content=""> <link rel="icon" type="image/x-icon" href="favicon.ico">

Luego modifico git.version.ts como este:

import ''rxjs/add/observable/combineLatest''; import { readFileSync, writeFileSync } from ''fs''; import { join } from ''path''; import { Observable } from ''rxjs/Observable''; const indexBasePath = join(__dirname, ''src''); const exec = require(''child_process'').exec; const revObs = new Observable<string>(s => { exec(''git rev-parse --short HEAD'', function (error: Error, stdout: Buffer, stderr: Buffer) { if (error !== null) { console.log(''git error: '' + error + stderr); } s.next(stdout.toString().trim()); s.complete(); }); }); const branchObs = new Observable<string>(s => { exec(''git rev-parse --abbrev-ref HEAD'', function (error: Error, stdout: Buffer, stderr: Buffer) { if (error !== null) { console.log(''git error: '' + error + stderr); } s.next(stdout.toString().trim()); s.complete(); }); }); Observable .combineLatest(revObs, branchObs) .subscribe(([revision, branch]) => { console.log(`revision: ''${revision}'', branch: ''${branch}''`); const baseHTML = readFileSync(join(indexBasePath, ''index.base.html''), ''utf8''); const html = baseHTML .replace(''<meta name="revision" content="">'', `<meta name="revision" content="${ revision }">`); writeFileSync( join(indexBasePath, ''index.html''), html, { encoding: ''utf8'' } ); });

En este ejemplo, solo pongo la revisión, pero puede ser más exhaustivo y poner la rama y la versión dentro de su sección HEAD de html

Necesito mostrar la revisión de git en la página de mi aplicación angular2. El proyecto se basa en angular-cli.

¿Cómo se puede extender la construcción para que la revisión de git se coloque, por ejemplo, en environment.ts u otro lugar accesible a la aplicación?


Las otras respuestas fueron útiles, pero preferí un enfoque más simple y directo. Aquí está el mío.

Ejecute npm install --save dev git-describe . Luego agrega git-version.js a la raíz:

// This script runs operations *synchronously* which is normally not the best // approach, but it keeps things simple, readable, and for now is good enough. const { gitDescribeSync } = require(''git-describe''); const { writeFileSync } = require(''fs''); const gitInfo = gitDescribeSync(); const versionInfoJson = JSON.stringify(gitInfo, null, 2); writeFileSync(''git-version.json'', versionInfoJson);

Opcionalmente, puede agregar /git-version.json a su archivo .gitignore .

Actualice su package.json para hacer algo como esto:

"scripts": { "build": "node git-version.js && ng build" }

Luego agregue version-info.ts a la raíz de su proyecto:

export const versionInfo = (() => { try { // tslint:disable-next-line:no-var-requires return require(''../../git-version.json''); } catch { // In dev the file might not exist: return { tag: ''v0.0.0'', hash: ''dev'' }; } })();

E import el versionInfo en su app.component.ts o en cualquier otro lugar donde quiera usarlo.


Para angular 6

1 Instalar git-describe como una dependencia de desarrollo

npm i git-describe -s

2 En su proyecto raíz cree un grab-git-info.js

const { gitDescribeSync } = require(''git-describe''); const { writeFileSync } = require(''fs''); const path = require(''path''); const info = gitDescribeSync(); const infoJson = JSON.stringify(info, null, 2); writeFileSync(path.join(__dirname, ''/src/git-version.json''), infoJson);

La salida del script grab-git-info.js será el archivo ''git-version.json'' en / src / que contendrá toda la información de git que necesita nuestra aplicación.

Para poder importar el archivo json (o cualquier otro archivo json) necesitamos agregar un archivo de definición declarando el módulo agregado para que el compilador Typescript lo reconozca.

  1. Bajo su / src cree el archivo typings.d.ts (lea más acerca de typings.d.ts aquí: https://angular.io/guide/typescript-configuration#typescript-typings )

/src/typings.d.ts:

declare module ''*.json'' { const value: any; export default value; }

¡A partir de este momento, puede importar cualquier archivo json ubicado en / src como módulo!

En tu componente puedes importar este json.

import * as data from ''../../../git-version.json''; ... public git = data;

En el html

Rev: {{git.hash}}

Finalmente agregue y lo más importante, ejecute el script antes de construir

En package.json agregar:

"scripts": { "ng": "ng", "start": "ng serve", "build": "node grab-git-info && ng build",

Y ejecuta la aplicación con

npm run build


Según lo sugerido por @Yuri, pude resolver esto mediante el uso de scripts npm .

  1. Se definió git.version.ts en la raíz del proyecto angular-cli:

    import fs = require(''fs''); import { Observable } from ''rxjs''; let exec = require(''child_process'').exec; const revision = new Observable<string>(s => { exec(''git rev-parse --short HEAD'', function (error: Error, stdout: Buffer, stderr: Buffer) { if (error !== null) { console.log(''git error: '' + error + stderr); } s.next(stdout.toString().trim()); s.complete(); }); }); const branch = new Observable<string>(s => { exec(''git rev-parse --abbrev-ref HEAD'', function (error: Error, stdout: Buffer, stderr: Buffer) { if (error !== null) { console.log(''git error: '' + error + stderr); } s.next(stdout.toString().trim()); s.complete(); }); }); Observable .combineLatest(revision, branch) .subscribe(([revision, branch]) => { console.log(`version: ''${process.env.npm_package_version}'', revision: ''${revision}'', branch: ''${branch}''`); const content = ''// this file is automatically generated by git.version.ts script/n'' + `export const versions = {version: ''${process.env.npm_package_version}'', revision: ''${revision}'', branch: ''${branch}''};`; fs.writeFileSync( ''src/environments/versions.ts'', content, {encoding: ''utf8''} ); });

  2. Agregado gancho pre-build en package.json :

    "scripts": { "ng": "ng", ... "start": "ng serve --proxy proxy-config.json", "prebuild.prod": "ts-node git.version.ts", "build.prod": "ng build -prod", ... },

  3. Utilice el src/environments/versions.ts generado en la aplicación.

    ACTUALIZACIÓN 10/2018: Aquí está la versión más legible de la secuencia de comandos, rxjs-version-agnostic:

    import { writeFileSync } from ''fs''; import { dedent } from ''tslint/lib/utils''; const util = require(''util''); const exec = util.promisify(require(''child_process'').exec); async function createVersionsFile(filename: string) { const revision = (await exec(''git rev-parse --short HEAD'')).stdout.toString().trim(); const branch = (await exec(''git rev-parse --abbrev-ref HEAD'')).stdout.toString().trim(); console.log(`version: ''${process.env.npm_package_version}'', revision: ''${revision}'', branch: ''${branch}''`); const content = dedent` // this file is automatically generated by git.version.ts script export const versions = { version: ''${process.env.npm_package_version}'', revision: ''${revision}'', branch: ''${branch}'' };`; writeFileSync(filename, content, {encoding: ''utf8''}); } createVersionsFile(''src/environments/versions.ts'');

Tenga en cuenta que al usar angular-cli v7.0.6, también tuve que cambiar la invocación de script en package.json :

"scripts": { ... "prebuild.prod": "ts-node -O ''{/"module/": /"commonjs/"}'' git.version.ts", ... },


Use gulp task usando gulp-replace y git-rev-sync para agregar el hash y la rama en la compilación:

1) Crear la tarea trilla

var gulp = require(''gulp''), replace = require(''gulp-replace''), git = require(''git-rev-sync''), gulp.task(''git'', function () { gulp.src(''src/index.html'') .pipe(replace(''{{git-branch}}'', git.branch())) .pipe(replace(''{{git-hash}}'', git.short())) .pipe(gulp.dest(''src/'')) }); // Build Tasks gulp.task(''build'', [''git'']);

2) Agregue el siguiente código a index.html:

{{git-branch}}@{{git-hash}}

3) Ejecutar

gulp build