代码之家  ›  专栏  ›  技术社区  ›  ZZZ

在构建之前修改ts文件的angular cli?

  •  0
  • ZZZ  · 技术社区  · 6 年前

    我使用angular 6和angular cli构建aot。spa有一个about对话框来告诉当前的前端版本,基本上是yymmd:mm。我将版本存储在environments/environment.ts中:

    export const AppConfigConstants: AppConfigConstantsType = {
    
        version: '180709.13',
    
    };
    

    运行前当前

    ng build --configuration=production
    

    我必须手动修改版本。如果版本号的更新可以自动化的话会更好。

    angular cli中是否有修改ts文件的好功能?或者你有别的办法?

    2 回复  |  直到 6 年前
        1
  •  1
  •   fjc    6 年前

    可以将脚本添加到 npm build 在运行之前增加版本号的 ng build 以下内容:

    版本号可以存储在json文件中,您可以在应用程序中读取该文件:

    src/version.json格式

    {
        "v": 0
    }
    

    increment-version.js版本

    // read version.json from file system, increment the version by 1
    
    const fs = require("fs");
    fs.readFile("src/version.json", (err, content) => {
        const versionObject = JSON.parse(content.toString());
        versionObject.v ++;
        fs.writeFile("src/version.json", JSON.stringify(versionObject), () => {});
    });
    

    包装袋

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

    角度.json

    "assets": [
        ...
        "src/version.json"
    ]
    

    打字

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

    关于对话框.ts

    import * as version from '../version.json';
    const versionNumber = version.v;
    
        2
  •  0
  •   ZZZ    6 年前

    我一般用批处理文件来调用ng build。

    批处理文件如下:

    cd %~dp0NGSource
    
    for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
    
    set today=%MyDate:~0,4%%MyDate:~4,2%%MyDate:~6,2%%time:~0,2%%time:~3,2%
    
    @echo const BUILD_TIME={buildTime: %today%} > src\conf\buildTime.js
    
    ng build --configuration=production
    

    buildtime.js包含在angular.json的scripts节点中,因此它绑定在scripts.xxxxx.js中。我的TS代码通过以下声明访问此文件:

    declare const BUILD_TIME: {
        buildTime?: string;
    }
    
    interface AppConfigConstantsType {
        version: string;
        buildTime?: string;
    }
    
    export const AppConfigConstants: AppConfigConstantsType = {
        version: '2.3',
        ...(typeof BUILD_TIME === 'undefined' ? { buildTime: 'Unknown' } : BUILD_TIME),
    };
    

    最后,我决定将版本号和内部版本号分开。如果你想把它们组合成一个字符串,调整上面的代码应该不难。