在为桌面
构建离子项目时,我使用以下命令离子cordova构建浏览器--prod
导致生成以下文件
构建/ main.js
但是,我希望能够在生成过程中自动为生成的文件添加版本号。所以最终会得到像
这样的东西构建/ main.js?版本= 1.00
以避免在每次prod构建后都需要清除浏览器缓存。
是否有这样的标志,还是我必须手动做的事情?
任何建议都会很棒!
修改
对于任何有兴趣的人,我的解决方案都在GitHub上!
https://github.com/RichardM99/ionic-3-version-build-file-hook
答案 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
如果您只需要浏览器,则可以调整脚本。