2016-02-21 11 views
5

Stiamo usando webjars con Maven nel nostro progetto. Così abbiamo centinaia di JSP con codice come questo:Rimuovi la versione di webjars dall'URL

<%--JSP CODE--%> 
<script src="<c:url value="/webjars/jquery/2.2.0/jquery.min.js" />" type="text/javascript"></script> 
<script src="<c:url value="/webjars/bootstrap/3.3.6/js/bootstrap.min.js" />" type="text/javascript"></script> 
......... 

E come si può intuire è un lavoro complicato per l'aggiornamento a versioni più recenti di webjars. Così sto cercando la soluzione che mi permetterà di importare gli script come questo:

<%--JSP CODE--%> 
<script src="<c:url value="/webjars/jquery/jquery.min.js" />" type="text/javascript"></script> 
<script src="<c:url value="/webjars/bootstrap/js/bootstrap.min.js" />" type="text/javascript"></script> 
......... 

Fondamentalmente voglio rimuovere una versione webjar da URL. Puoi proporre una soluzione semplice e simpatica per questo problema?

Finora arrivo a servlet di risorse che può indovinare quale file restituire dall'URL. Ma questa soluzione implica la scansione completa delle risorse all'inizio di un'applicazione.

+1

Se si utilizza il minifying è possibile creare quei file js in una cartella separata e con un nome che non contenga la versione ... – khmarbaise

risposta

5

Dai uno sguardo al progetto webjars-locator, puoi utilizzarlo per creare un controller di richiesta adeguato.

In caso di utilizzo Spring MVC questo sarebbe:

@ResponseBody 
@RequestMapping("/webjarslocator/{webjar}/**") 
public ResponseEntity locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) { 
    try { 
     String mvcPrefix = "/webjarslocator/" + webjar + "/"; // This prefix must match the mapping path! 
     String mvcPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
     String fullPath = assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length())); 
     return new ResponseEntity(new ClassPathResource(fullPath), HttpStatus.OK); 
    } catch (Exception e) { 
     return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
    } 
} 

Disclaimer: Questo è il codice da WebJarsdocumentation (sezione Making dependencies version agnostic).

In questo caso è possibile richiedere le librerie JS in modo seguente:

<link rel='stylesheet' href='/webjarslocator/bootstrap/css/bootstrap.min.css'> 

Si prega di notare che non c'è nessuna versione di questo URL.

Si può anche provare ad ottimizzare queste richieste (e di conseguenza le scansioni del filesystem) usando la cache, ma sono quasi sicuro che qualche tipo di cache sia già presente in webjars-locator (non l'ho verificato).

Problemi correlati