Come separare diversi plugin con lo stesso nome

1

Sto scrivendo il codice di installazione della mia applicazione web modulare e sono incappato nella scrittura del codice di aggiornamento per i plugin.

Il problema che sto avendo è: come fai a sapere se il plugin è già installato? Gli sviluppatori possono dare al proprio plugin un nome molto semplice come "News". Probabilmente ci saranno più plugin con quel nome e ora il sistema pensa che sia lo stesso plugin e lo sovrascriverà.

Che cosa posso fornire al plug-in per renderlo unico durante l'installazione e sapere che si tratta di un aggiornamento quando un utente fornisce un nuovo pacchetto di installazione?

L'idea è che ci sia solo un servizio di installazione, non un'installazione e un aggiornamento. Il sistema dovrebbe essere in grado di sapere se si tratta di una nuova installazione o di un aggiornamento.

    
posta Jamie 25.01.2015 - 19:07
fonte

1 risposta

2

Hai notato correttamente che un pacchetto ha un nome, un autore e una versione. Questi tre identificano un pacchetto in modo univoco. Se devi mappare questo file su un file system, puoi scegliere una struttura come

./plugins/author-id/package-id/version/

Ciò consente a due autori di offrire pacchetti diversi con lo stesso nome e più versioni di un pacchetto da installare contemporaneamente. Se non è necessario il supporto per più versioni, puoi eliminare il livello version .

La domanda è come assegnare gli ID autore. Java usa il semplice trucco di usare semplicemente i nomi di dominio, poiché dovrebbero essere comunque unici. Questo funziona bene se ci si può aspettare che ogni sviluppatore possieda un dominio (questo sembrerebbe essere il caso nello sviluppo di applicazioni web). Tuttavia, Java inverte l'ordine dei sottodomini in modo che le informazioni gerarchicamente più importanti siano nella parte anteriore del nome. Il dominio dev.example.com è mappato al prefisso com.example.dev .

È utile avere un file in ogni pacchetto che descrive i metadati. Questo file potrebbe dichiarare informazioni sulle dipendenze, un riepilogo di ciò che fa questo pacchetto, un numero di versione.

Con questa struttura, l'installazione o l'aggiornamento di un pacchetto funzionerebbe in questo modo:

  • Il nuovo pacchetto viene decompresso in una directory temporanea e vengono letti i metadati.
  • La directory dei moduli installati viene cercata per un pacchetto con lo stesso nome dello stesso autore. Se non viene trovata alcuna corrispondenza, questo pacchetto è installato.
  • Se viene trovata una corrispondenza e il numero di versione è più alto, il vecchio pacchetto viene rimosso e il nuovo pacchetto installato.
  • Prima dell'installazione, la presenza delle dipendenze è verificata.

Ci sono tonnellate di gestori di pacchetti da cui puoi rubare idee. Dai un'occhiata a CPAN (Perl), pip (Python), gem (Ruby), npm (Node.js). Ognuno di questi ha alcuni punti di forza e alcuni punti deboli.

    
risposta data 25.01.2015 - 20:22
fonte

Leggi altre domande sui tag