How to display the app version in Angular?

后端 未结 10 1547
暗喜
暗喜 2020-12-02 04:55

How do I display the app version in angular application? the version should be taken from package.json file

{
  \"name\": \"angular-app\",
  \"v         


        
10条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-02 05:32

    It is a good idea to declare version as environment variable So you can use it everywhere in your project. (specially in case of loading files to be cached based on version e.g. yourCustomjsonFile.json?version=1.0.0)
    In order to prevent security issues (as @ZetaPR mentioned) we can use this approach (on @sgwatgit 's comment)
    In short: we create a yourProjectPath\PreBuild.js file. Like this:

    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`);
    });
    

    Above snippet will create a new file /src/environments/version.ts which contains a constant named version and set it by extracted value from package.json file.

    In order to run content of PreBuild.json on build, We add this file into Package.json -> "scripts": { ... }" section like following. So we can run project using this code: npm start:

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

    Now we can simply import version and use it wherever we want:

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

提交回复
热议问题