如何使用grunt-bower-task处理javascript库版本更改?

时间:2014-07-29 05:15:27

标签: gruntjs bower

我正在使用grunt + bower + grunt-bower-task插件来管理javascript库依赖项。

说我已经用凉亭安装了jquery

bower install jquery --save

和grunt-bower-task:

bower: {
  install: {
    options: {
      targetDir: './public/lib',
      layout: 'byComponent',
      install: true,
      verbose: true,
      cleanTargetDir: true,
      cleanBowerDir: false,
      bowerOptions: {}
    }
  }
}

运行grunt bower后,jquery将被复制到:

/public/lib/jquery/jquery.js

因此客户端将使用url:

获取jquery
http://somedomain.com/public/lib/jquery/jquery.js

但我有疑问,如果我更改了jquery版本该怎么办?

假设我使用了另一个带有bower的查询版本,但它仍然会被复制到同一个位置,用户将使用相同的URL获取它。如果我为它添加了缓存标头,用户将无法在过期之前从服务器获取新的jquery.js代码。

如何解决这个问题?

我认为如果我们可以在运行grunt bower时将版本添加到文件名中,那将解决它,例如

http://somedomain.com/public/lib/jquery/jquery-1.8.js

但是我无法在grunt-bower-task找到这样的功能。

1 个答案:

答案 0 :(得分:1)

我会在bower.json文件中处理库版本控制。每当您调用bower install命令时,您的版本都应该安装..类似这样的

 "dependencies": {
    "angular": "~1.2.21",
    "jquery": ">=2.1.1"
 },  
 "resolutions": {
   "jquery": ">=2.1.1"
 }

但是现在他们都是jquery.js,无论版本如何。所以现在你要做的是添加某种类型的缓存清除策略,这将迫使浏览器下载最新版本的脚本。缓存破坏javascript在线有大量资源,所以我不会在这里重申这些资源,但是有一些笨拙的任务可以帮助你像this one

我要做的一个稍微偏离的主题建议是将你的外部脚本连接并缩小为一个js文件,也许是你的应用程序脚本的另一个。随着一个或多个外部库的更改,缓存清除技术将强制浏览器获取最新版本的相关脚本。