2017-08-11 5 views
9

ich den folgenden Befehl verwenden, wenn ein ionisches Projekt für Desktop-AufbauIonic 3 Prod Mit Version Build-Nummer

ionische cordova build Browser

--prod

, die in der folgenden Datei führt

erzeugt wird

build/main.js

Ich würde jedoch gerne in der Lage sein, der generierten Datei automatisch eine Versionsnummer als Teil des Build-Prozesses hinzuzufügen. So würde am Ende mit etwas wie

build/main.js? Version = 1,00

wie um zu vermeiden, den Browser-Cache nach jedem prod Build zu löschen.

Gibt es dafür eine Flagge, oder muss ich das manuell machen?

Jeder Rat wäre großartig!

EDIT:

Meine Lösung ist auf GitHub für alle Interessierten!

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

Antwort

4

Hier einige Ratschläge - Sie können einen cordova Haken erstellen.

Hooks sind Skripte, die in verschiedenen Phasen des Buildprozesses ausgeführt werden sollen. In Ihrem Fall sehen Sie sich ein Skript an, das die main.js-Datei nach Abschluss des Build-Ereignisses umbenennt, oder anders ausgedrückt, einen Hook vom Typ "after_build".

Das Skript wird normalerweise eine Node.js-Datei sein, obwohl Sie auch andere Arten von Skripten ausführen können.

Eine weitere Sache. Da Sie den Cache umgehen wollen, werden Sie die Datei nicht umbenennen. Was Sie tun möchten, ist, den Verweis auf "main.js" in Ihrem "index.html" zu ersetzen, um eine zufällige oder vielleicht Ihre tatsächliche Versionsnummer einzuschließen.

Ich habe dich in eine Richtung wies, aber nicht löffeln. Suchen Sie nach Unterlagen zu Cordova-Haken. Sie sind super einfach, wenn Sie Javascript/Node

So etwas verstehen sollte den Job erledigen:

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'); 

Wenn Sie die tatsächliche Build-Nummer möchten, können Sie Ihre config.xml lesen und analysieren, um es dessen Wert.

Ich hoffe, es hilft.

+1

Vielen Dank Herr. – user2085143

3

ich vor blog langer Zeit

schrieb

In meiner Build-Pipeline ich habe Befehl zu setzen Version

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

$ (app.versionPrefix) - ist eine Präfix-Version wie 0.1.

$ (Build.BuildNumber) - ist die Version

bauen

Dann habe ich Umgebungsdatei haben

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

Dann habe ich js Skriptversion in den Bereichen Umwelt und config.xml zu aktualisieren

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 
} 

HINWEIS: Sie müssen das Plugin ersetzen ersetzen in der Datei

Dann in Linie zu bauen Rohr Ich betreibe dieses Skript

node ./replace.build.js 

In Ihrem Fall, wenn Sie nur für Browser benötigen Sie tune Skript kann.