2016-10-12 9 views
1

Я нашел разбросанные проблемы github и статьи о приложениях Aurelia и SystemJS с кэшированием; однако у меня не было успеха на 100%. Один метод плагина systemjs имел побочные эффекты приклеивания по URL-адресу в два раза. Кроме того, параметры url, похоже, не гарантируют, что кэшированные ресурсы не используются во всех браузерах.Текущая рекомендуемая техника для приложений Aurelia (на основе SystemJS) для кэширования

Лучшее, 100% твердое решение с моей точки зрения заключается в развертывании приложения на другом пути. Например, лавировать версию и время сборки в URL путь, https://my.domain.com/v1.0.0b20161011_120001/index.html, https://my.domain.com/v1.0.0b20161011_120122/index.html

Какова текущая рекомендованная техника, плагин или другой способ очистки кэша Aurelia приложений?

+3

@CasiOo в Aurelia/Обсуждение GITTER канала рекомендуется установка REV: истинное в bundles.js. Кажется, это работает. Я не уверен на 100% об этом, но просто потому, что не прошел тщательного тестирования. Я последую за ним, давая ему поехать некоторое время. –

+1

Замечание Майкла Прескотта выше работало для меня. Для ответа я считаю, что это должно быть первым, что нужно попробовать, прежде чем прибегать к более привлекательным решениям, изложенным Даркстаром. –

ответ

2

Если вы хотите, чтобы ваше Aurelia приложение будет постоянно обновляется после изменения, вы можете посмотреть по следующей теме:

https://github.com/aurelia/framework/issues/94

Aaike комментировал 8 мая 2015:

изменить index.html, чтобы добавить расширение прямо перед импортом Аурелия-Bootstrapper

<script> 
     var systemLocate = System.locate; 
     System.locate = function(load) { 
     var System = this; 
     return Promise.resolve(systemLocate.call(this, load)).then(function(address) { 
      if(address.lastIndexOf("html.js") > -1) return address; 
      if(address.lastIndexOf("css.js") > -1) return address; 
      return address + System.cacheBust; 
     }); 
     }; 
     System.cacheBust = '?bust=' + Date.now(); 

     System.import('aurelia-bootstrapper'); 
</script> 

Вы также можете сделать задачу gulp, которая добавляет номер версии к вашим связанным файлам, как предложено shaunluttin в потоке https://github.com/aurelia/framework/issues/94.

var gulp = require('gulp'); 
var replace = require('gulp-replace'); 
var fs = require("fs"); 

var buildNumberFile = 'build/build-number.txt'; 

var filesToChange = [ 
    'build/bundles.js', 
    'build/paths.js', 
    'config.js', 
    'package.json' 
]; 

gulp.task('cache-bust', function() { 

    // get the current build number 
    var contents = fs.readFileSync(buildNumberFile, 'utf8'); 
    version = parseInt(contents); 

    // bump the current build number 
    version = version + 1; 
    fs.writeFile(buildNumberFile, version); 

    // 
    // matches "dist 
    // matches 'dist 
    // matches "dist1 
    // matches 'dist12 
    // 
    var outputDirectoryRegex = /([\"|\']dist)([0-9]*)/g; 

    // replace the build number in appropriate files 
    gulp.src(filesToChange, { base: './' }) 
     .pipe(replace(outputDirectoryRegex, '$1' + version)) 
     .pipe(gulp.dest('.')); 
}); 
0

Вариант 1 полностью не работает, но Вариант 2 работает для меня. Я просто должен был изменить outputDirectoryRegEx к

var outputDirectoryRegex = /([\"|\'|\\|\/]dist)([0-9]*)/g; 

поскольку шахта находится внутри Wwwroot/