Angular CLI在构建之前修改TS文件?

时间:2018-07-10 05:40:55

标签: angular typescript angular-cli angular-cli-v6

我正在使用Angular 6和Angular CLI通过AOT进行构建。 SPA有一个About对话框,用于告知当前的前端版本,基本上是YYMMDD:mm。我将版本存储在environment / environment.ts中:

export const AppConfigConstants: AppConfigConstantsType = {

    version: '180709.13',

};

当前在运行

ng build --configuration=production

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

Angular CLI中是否有良好的功能来修改TS文件?还是您有其他解决方案?

2 个答案:

答案 0 :(得分:1)

您可以将脚本添加到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), () => {});
});

package.json

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

angular.json

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

typings.d.ts

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

about-dialog.ts

import * as version from '../version.json';
const versionNumber = version.v;

答案 1 :(得分:0)

我是一个批处理文件,通常可以调用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.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),
};

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