javascript - 如何处理 Angular 2 中的文件版本

标签 javascript angularjs angular single-page-application systemjs

在当前的 Angular 应用程序 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...)由我的加载程序在每个用户 session 中动态设置,每个文件的版本号可以不同。

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

建议我一些其他加载程序来解决这个问题,非常感谢!

最佳答案

经过一番研究,我找到了解决方案。 在运行 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 来为每个包添加不同的版本号。配置代码如下:

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

关于javascript - 如何处理 Angular 2 中的文件版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37637891/

相关文章:

javascript - jquery - 将类添加到具有多个类的现有 div

javascript - JS中获取随机数

javascript - 如何使用Electron菜单执行angular 7导航

Angular-Slickgrid 显示空白记录

javascript - 在 HTML 中显示任意数量的文本和复选框

javascript - Later.js - 下个月同一天

javascript - 如何将两个集合变成一个集合

AngularJS $http.post如何将json数据设置到请求正文中

javascript - 如果选择自动完成输入,则显示/隐藏 Div

扩展面板之间的 Angular Material 拖放项目不起作用