2016-02-21 4 views
5

Мы используем webjars с maven в нашем проекте. Таким образом, мы имеем сотни JSPs с кодом, как это:Удалить версию webjars от 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> 
......... 

И как вы можете догадаться, что это громоздкая работа для обновления до новых версий webjars. Поэтому я искал решение, которое позволит мне импортировать сценарии, как это:

<%--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> 
......... 

В основном я хочу, чтобы удалить версию webjar из URL. Можете ли вы предложить хорошее и простое решение этой проблемы?

До сих пор я придумываю ресурсный сервлет, который может догадаться, какой файл нужно вернуть по URL-адресу. Но это решение включает полное сканирование ресурсов в начале приложения.

+1

Если вы используете minifying, вы можете создать эти js-файлы в отдельной папке и с именем, которое не содержит версию ... – khmarbaise

ответ

5

Посмотрите на проект webjars-locator, вы можете использовать его для создания правильного контроллера запросов.

В случае использования Spring MVC это было бы:

@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); 
    } 
} 

Отказ от ответственности: Это код из WebJarsdocumentation (раздел Making dependencies version agnostic).

В этом случае вы можете попросить JS библиотек следующим образом:

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

Пожалуйста, обратите внимание, что нет никакой версии в этой ссылке.

Вы также можете попытаться оптимизировать эти запросы (и, следовательно, сканирование файловой системы) с помощью кеша, но я почти уверен, что какой-то кеш уже задействован в webjars-locator (я этого не проверял).

Смежные вопросы