2016-01-09 10 views
5

il mio progetto Maven ha la seguente struttura:Come condividere codice javascript tra i moduli Maven

  • "base" dei moduli - contiene condiviso file Java - dovrebbe contenere condiviso file javascript
  • modulo 1 - usa i file java condivisi come dipendenza di maven - dovresti usare i file javascript condivisi usando?
  • modulo 2 - utilizzare i file java condivisi come dipendenza maven - utilizzare i file javascript condivisi utilizzando?

Attualmente, il webpack sembra essere la novità di javascript packaging e npm sembra essere un vero e proprio gestore di pacchetti. Così ho provato i seguenti: - moduli base crea un fascio npm (con npm pack) utilizzando webpack - moduli 1 e 2 installare questo pacchetto manualmente utilizzando un percorso relativo alla cartella di destinazione modulo base in cui il pacchetto npm è

Perché non ho usato npm publish? - Non è possibile aggiornare i pacchetti npm pubblicati, quindi ogni build dovrebbe creare un nuovo numero di versione - Avrebbe bisogno di una connessione Internet per creare

Altre opzioni? - Avevo pensato di usare il plugin Maven risorse, ma questo sembra essere un sacco di lavoro manuale incluso (nomi di file, cartelle, ecc)

Quindi quello che sto chiedendo è: Lei condivide codice javascript tra moduli Maven all'interno dello stesso progetto? Come lo realizzi? Ci deve essere un modo migliore per farlo, o?

Se si vuole guardare il mio progetto, date un'occhiata qui: https://github.com/stefanrinderle/softvis3d

Grazie in anticipo per le risposte un commenti!

+1

Immagino che https://maven.apache.org/plugins/maven-remote-resources-plugin/ possa essere utile, ma non posso darti una risposta completa perché il tuo esempio non è abbastanza semplice da comprendere. Prendi in considerazione l'aggiunta di un esempio molto semplice (Maven multimodule, 3-4 progetti, 1 file JS ecc.) E chiara aspettativa – michaldo

+0

Suppongo che OP ti abbia dato pieno accesso al suo repository github ... –

+0

@RajaAnbazhagan, non volevo pieno accesso al repo. Ho suggerito di preparare l'esempio in base a http://stackoverflow.com/help/mcve (in ogni caso, il problema è risolto in modo che il caso sia chiuso) – michaldo

risposta

4

Fondamentalmente per ridistribuire separatamente i moduli npm è necessario utilizzare npm publish. Durante il tempo di sviluppo, tuttavia, npm ha una bella funzione npm link, che collega la tua cartella locale come dipendenza globale e fa in modo che npm lo usi invece di scaricarlo dal repository. Quindi, ho appena aggiunto npm link al progetto e modificato la directory di installazione del nodo in modo che tutti i sottomoduli utilizzino la stessa istanza di nodo. In questo modo puoi sviluppare facilmente i tuoi moduli e pubblicare quando sei pronto.

base/pom.xml:

<plugin> 
    <groupId>com.github.eirslett</groupId> 
    <artifactId>frontend-maven-plugin</artifactId> 
    ... 
    <configuration> 
    ... 
    <installDirectory>../node</installDirectory> 
    </configuration> 
    <executions> 
    <execution> 
     <id>npm link</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
     <configuration> 
     <arguments>link</arguments> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

..module/pom.xml

<plugin> 
    <groupId>com.github.eirslett</groupId> 
    <artifactId>frontend-maven-plugin</artifactId> 

    <configuration> 
    <installDirectory>../node</installDirectory> 
    </configuration> 
    <executions> 
    <execution> 
     <!-- link before install --> 
     <id>npm link softvis3d-viewer</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
     <configuration> 
     <arguments>link softvis3d-viewer</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>npm install</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
    </execution> 
    ... 
    </executions> 
</plugin> 

..module/package.json

"devDependencies": { 
    ... 
    "softvis3d-viewer": "0.0.4-SNAPSHOT" 
    }, 

Vedere i dettagli in my commit

+0

Questa è davvero una buona opzione. Non sapevo di npm link e sembra che io stavo già andando bene. Grazie per aver fornito il commit, è già integrato nel progetto principale. – user984200

0

NPM funziona se il Il modulo Maven fornisce JavaScript che verrà sottoposto a transpiling/minification/concatenation. Se è richiesta la condivisione di moduli precompilati, utilizzo correttamente web-fragment.xml (definito nelle specifiche Servlet 3.0) e metto il mio JavaScript ecc. Sotto META-INF/resources. A seconda della tecnologia di front end, sarà necessario utilizzare un approccio pertinente alla suddivisione del codice o ai componenti Web.

In sostanza, il lato client dovrà caricare ed eseguire il codice della libreria prima di eseguire qualsiasi cosa che dipende da esso.

Se si dispone di una piccola libreria (-ish) con API specifica che si desidera condividere tra i moduli Maven e fa tutto parte dello stesso ecosistema, npm publish e npm link sono una soluzione. Per pezzi di funzionalità più grandi, specialmente quelli che hanno profili di utilizzo specifici (ad esempio, editor di profili utente o pagina di configurazione - non utilizzati ogni volta), questi possono essere caricati dinamicamente).

Mentre nulla di nuovo è nuovo, quest'area (moduli POM, JAR, NPM e JS/ES6) sembra essere alla ricerca dell'approccio migliore e ci vorrà del tempo per sistemarsi su un paio di robusti tecnici. Non conosco un pulito, assolutamente nessun cerotto, un insieme di regole e impostazioni per affrontarlo.