如何处理角度2中的文件版本

时间:2016-06-05 02:33:02

标签: javascript angularjs angular single-page-application systemjs

在当前的角度应用1.x中,我使用自定义模块和文件加载器,这允许我在文件URL中添加后缀(v = x.y)。浏览器将基于该后缀从缓存加载文件或从服务器获取文件。如:

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

我的加载器在每个用户会话中动态设置版本号(1.2,1.3 ......),每个文件的版本号可以不同。

在角度2上,使用SystemJs,如何定义我的应用程序中使用的SystemJs导入的文件的版本号。

建议我其他一些装载机来解决此案件,我们非常感谢!

2 个答案:

答案 0 :(得分:3)

在完成一轮之后,我找到了解决方案。 在运行system.config.js之前,我将通过请求从服务器加载版本号。我们在开始时有一个app版本号。

var vQuery = '?v=1.3';

然后我可以通过systemjs中的config包为每个请求添加一个前缀。只需为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。配置代码如下:

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

答案 1 :(得分:0)

这应该在构建时完成 - 使用https://www.npmjs.com/package/gulp-rev-replace

之类的东西

我建议使用文件哈希对文件进行版本控制 - 因为它只会导致实际更改的文件在浏览器中被重新记录。