0

В текущем угловом приложении 1.x я использую пользовательский модуль и загрузчик файлов, которые позволяют мне добавить суффикс (v = x.y) в файл url. Браузер будет основываться на этом суффиксе, чтобы загрузить файл из кеша или взять его с сервера. Такие, как:Как обрабатывать версию файлов в угловом формате 2

'app/user/user.services.js?v=1.2', 
'app/order/order.services.js?v=1.3', 

номер версии (1.2, 1.3 ...) устанавливаются динамически в каждом сеансе пользователя моего грузчиком, номер версии для каждого файла может быть различным.

На угловом 2, с SystemJs, Как определить номер версии для файлов, импортированных SystemJs, используемых в моем приложении.

Предлагаю некоторые другие погрузчики для решения этого случая высоко ценится!

+0

Вы пытаетесь решить проблему кеша браузера? используя реверсирование файлов? –

+0

Да, я хочу, чтобы браузер использовал кешированный файл перед тем, как запросить сервер для этих файлов с systemjs в угловом 2 –

+0

нормально, поэтому для достижения этого вы можете использовать задачи gulp, тем самым он будет добавлять хэш-код по умолчанию в ваш url файла, который используется для устраните проблему с кешем браузеров. Я не знаю о загрузчике systemJs или о какой-либо связанной с этим вещи. –

ответ

3

После рабочего раунда я нашел решение для этого. Перед запуском system.config.js, я загружу номер версии с сервера по запросу. И у нас есть номер версии для приложения во время запуска.

var vQuery = '?v=1.3'; 

Тогда я могу добавить префикс для каждого запроса по пакету конфигурации в systemjs. Это просто добавления префикса к значению defaultExtension

packages: { 
    app: { 
     main: './main', 
     defaultExtension: 'ts' + vQuery 
    } 
} 

После этого, когда SystemJS загрузить файл, он автоматически добавляет префикс в файл URL, такие как (v = 1,3):

/src/components/todoList.ts?v=1.3 
/src/components/newTodo.ts?v=1.3 

Мы также можем добавить другой номер версии для каждого пакета, создав конфигурацию для каждого пакета и динамически добавив его в SystemJS. Config код, как показано ниже:

var ngPackageNames = ['all','of your','packages']; 

// list of configs for each package 
var packages = []; 

//method to find version for each package 
getVersionOfFile: function(package){ 
    // find version of package and return 
    return 'v=' + 'version of this package'; 
} 

// generate config 
ngPackageNames.forEach(function(package){ 
    // handle config for this package 
    packages[pkgName] = { main: packageFile, defaultExtension: 'ts' + getVersionOfFile(package) }; 
}); 

// at last, add config for all packages to SystemJS 
var config = { 
    map: map, 
    packages: packages 
} 

System.config(config); 
+0

Здравствуйте @VuQuyet: «Я загружу номер версии с сервера по запросу», как вы это делаете? Где вы держите эту версию? thx – Yvan

+0

Просто сохраните файл json с номером версии, например {"version": "0.0.1"}, затем запросите версию с $ http.get (versionUrl) –

0

Это должно быть сделано во время сборки - используя что-то вроде https://www.npmjs.com/package/gulp-rev-replace

Я бы рекомендовал использовать хэши файлов для версии файлов - как это будет вызывать только файлы, которые имеют на самом деле изменен, чтобы быть извлеченным в браузере.

+0

Можете ли вы поговорить более подробно о том, как мы будем использовать gulp-rev и gulp-rev-replace для обработки команд импорта или фазы конфигурации SystemJ? –