我有一个使用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的用处似乎没有用这种尴尬的解决方案。
答案 0 :(得分:2)
您可以使用Bower hooks来操纵文件修改时间。这是一种黑客攻击,但可以达到你想要的目的
您需要注册 postinstall 挂钩并将更新的组件列表作为参数传递。调用脚本时,%将替换为以空格分隔的正在安装或卸载的组件列表
钩子应该在.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());
});
});