我希望在我的Angular2应用程序上的某个地方有一个时间戳或内部版本号,这样我就可以判断用户是否使用旧的缓存版本.
如何在AOT编译/构建时使用Angular2中的AngularCLI执行此操作?
安装插件 npm install replace-in-file --save-dev
--save-dev
添加到prod环境src/environments/environment.prod.ts新属性
export const environment = { production: true, version: '{BUILD_VERSION}' }
将构建文件添加replace.build.js
到文件夹的根目录
var replace = require('replace-in-file'); var buildVersion = process.argv[2]; const options = { files: 'src/environments/environment.prod.ts', from: /{BUILD_VERSION}/g, to: buildVersion, allowEmptyPaths: false, }; try { let changedFiles = replace.sync(options); console.log('Build version set: ' + buildVersion); } catch (error) { console.error('Error occurred:', error); }
将脚本添加到package.json
"updateBuild": "node ./replace.build.js"
environment.version
在您的应用中使用
在构建呼叫之前 npm run updateBuild -- 1.0.1
PS.您必须始终记住{BUILD_VERSION}永远不会被提交.
PS.我在博客中写了一个更好的解决方案
PS.3 as @ julien-100000提到你不应该使用更新版本提交environment.prod.ts.版本更新必须仅在构建过程中发生.永远不应该承诺.
将此步骤添加到jenkins-job:
echo export class MyVersion {public static readonly number = '%SVN_REVISION%'} > src\my-version.ts
你可以访问这样的数字:
import {MyVersion} from "../my-version"; export class AppComponent { constructor() { console.log("Welcome to MyApp version " + MyVersion.number); } }
该解决方案是+ lightweight,+ easy to read,+ robust.
无需安装replace-in-file
或执行@VolodymyrBilyachat提到的任何步骤。
就在您所需的environment。*。ts文件中(有关环境的更多信息,请阅读angular-2-and-environment-variables),要求package.json
如下:
export const environment = { version: require('../package.json').version };
然后在您的应用导入环境中:
import { environment } from '../environments/environment';
而且你有environment.version
。如果遇到cannot find name 'require'
错误,请阅读此答案
更多信息
注意:正如@VolodymyrBilyachat在评论中提到的那样,这会将您的package.json
文件包括在最终的捆绑文件中。