5

我有一个使用 Grunt 和 Bower 的项目。Grunt-uglify 会将 Bower 目录中的文件连接/缩小到deploy/scripts.js文件夹。我正在使用 Grunt-newer,所以它只会deploy/scripts.js在添加或更改新文件时更新。一切都很好......除了......

当我使用 Bower 添加新库时,文件日期反映的是文件上传到 Bower 库(或托管它的人)的时间,而不是它在我的计算机上创建的日期。因此,Grunt-newer 发现新的 Bower 库比旧版本更旧deploy/scripts.js,因此不会更新文件。

一——麻烦——解决办法是打开新的库.js文件,重新保存。它修改文件日期,因此 grunt-newer 将创建deploy/script.js文件。然而,对于如此尴尬的解决方案,Bower 的用处似乎没有意义。

4

1 回答 1

2

您可以使用Bower 挂钩来控制文件修改时间。这是一种 hack,但可以实现您正在寻找的东西。
您将需要注册一个安装后挂钩并将更新的组件列表作为参数传递。调用脚本时,% 将替换为以空格分隔的正在安装或卸载的组件列表。
钩子应该在.bowerrc文件中注册:

{
    "scripts": {
        "postinstall": "hook.sh %"
    }
}

然后,您将需要一个脚本来迭代组件并更改文件的修改时间。
例如一个shell脚本:

#!/bin/bash

for var in "$@"
do
    find "./bower_components/$var" -exec touch {} \;
done

这是另一个用于相同目的的 node.js 脚本示例:

var fs = require('fs');
var path = require('path')

var components = process.argv.slice(2)
components.forEach(function (comp) {
    var comp_path = path.join(process.cwd(),"bower_components",comp);
    var files = fs.readdirSync(comp_path);
    files.forEach(function(file) {
        fs.utimesSync(path.join(comp_path, file), new Date(), new Date());
    });
});
于 2014-09-14T19:07:35.000 回答