Ionic 3 Prod Build版本号

时间:2017-08-11 11:32:10

标签: javascript cordova ionic3

在为桌面

构建离子项目时,我使用以下命令
  

离子cordova构建浏览器--prod

导致生成以下文件

  

构建/ main.js

但是,我希望能够在生成过程中自动为生成的文件添加版本号。所以最终会得到像

这样的东西
  

构建/ main.js?版本= 1.00

以避免在每次prod构建后都需要清除浏览器缓存。

是否有这样的标志,还是我必须手动做的事情?

任何建议都会很棒!

修改

对于任何有兴趣的人,我的解决方案都在GitHub上!

https://github.com/RichardM99/ionic-3-version-build-file-hook

2 个答案:

答案 0 :(得分:4)

这里有一些建议 - 你可以创建一个cordova钩子。

挂钩是您希望在构建过程的不同阶段执行的脚本。在您的情况下,您正在查看在构建事件完成后重命名main.js文件的脚本,或者换句话说是'after_build'类型的钩子。

该脚本通常是Node.js文件,但您也可以执行其他类型的脚本。

还有一件事。由于你想绕过缓存,你不会重命名文件本身。您要做的就是替换“index.html”中对“main.js”的引用,以包含随机或可能的实际版本号。

我已指出你的方向,但不会舀勺。查看有关cordova挂钩的文档。如果您了解Javascript / Node

,它们非常简单

这样的事情应该完成工作:

var index_orig = fs.readFileSync(path-to-index.html, 'utf8');
var index_new = index_orig.replace("main.js", "main.js?version="+version_num);
fs.writeFileSync(path-to-index.html, index_new, 'utf8');

如果你想要实际的内部版本号,你可以阅读你的config.xml并解析它以获得它的价值。

希望它有所帮助。

答案 1 :(得分:4)

我很久以前写过blog

在我的构建管道中,我有命令设置版本

version "$(app.versionPrefix)$(Build.BuildNumber)"

$(app.versionPrefix) - 是一个前缀版本,如0.1。

$(Build.BuildNumber) - 是构建版本

然后我有环境文件

export const environment = {
    apiUrl: 'https://....',
    production: true,
    version: '0.0.57'                                     
}

然后我有js脚本来更新环境和config.xml

中的版本
var replace = require('replace-in-file');
var package = require("./package.json");
var buildVersion = package.version;
const options = {
    files: ['config.xml'],
    from: /" version="([0-9]*.[0-9]*.[0-9]*)"/g,
    to: "\" version=\""+ buildVersion + "\"",
    allowEmptyPaths: false,
};

const optionsEnv = {
     files: ['src/environments/environment.prod.ts'],
    from: /version: '(.*)'/g,
    to: "version: '"+ buildVersion + "' ",
    allowEmptyPaths: false,
};

try {
    let changedFiles = replace.sync(options);
    if (changedFiles == 0) {
        throw "Please make sure that file '" + options.files + "' has \"version: ''\"";
    }
    changedFiles = replace.sync(optionsEnv);
    if (changedFiles == 0) {
        throw "Please make sure that file '" + optionsEnv.files + "' has \"version: ''\"";
    }
    console.log('Build version set: "' + options.to + '"');
}
catch (error) {
    console.error('Error occurred:', error);
    throw error
}

注意:您需要安装插件替换文件

然后在构建管道中,我正在运行此脚本

node ./replace.build.js

如果您只需要浏览器,则可以调整脚本。