在sbt邮件列表中问这个问题,但显然是phased out
我创建了一个project on github,用于解决“sbt> clean”从吹走工件更新缓存目录。 在0.12.4上工作得很好,但在0.13中打破,我的自定义更新缓存目录在“sbt> update”之后为空
相当于:
cacheDirectory <<= baseDirectory / "sbt-no-clean"
在0.13?我看到cacheDirectory
已被弃用,我们将改为使用streams
。
0.13的SBT FAQ有一个关于使用FileFunction.cached的部分,是替换上面的1个班轮吗?看起来不像。
Streams可能确实可以完成这项任务,但是由于使用cacheDirectory
的旧方法不再有效 - 从技术上讲,该属性已设置,但有些事情会覆盖它,所以它更多的是删除而不是弃用功能 - 明智的 - 我已经改变了方向并试图使用cleanKeepFiles
:
cleanKeepFiles <<= (streams) map{s=> Seq(s.cacheDirectory)}
我得到一个返回类型不匹配,令人抓狂,因为我不知道如何转向:
sbt.Def.Initialize[sbt.Task[Seq[java.io.File]]]
到
sbt.Def.Initialize[Seq[java.io.File]]
观点赞赏, 感谢
修改
如果您使用apply而不是map:
cleanKeepFiles <<= streams.apply{_.map(x=>Seq(x.cacheDirectory))}
然后你得到:
sbt.Task[Seq[java.io.File]]
似乎越来越近,但编译器想要:
Seq[java.io.File]
cleanKeepFiles
的类型为SettingKey[Seq[File]]
我对如何从流的类型中获取SettingKey[Seq[File]]
感到困惑:TaskKey[TaskStreams]
答案 0 :(得分:2)
完全忘了发布这个问题,谢天谢地很简单:
cleanKeepFiles <+= base / pathToCacheDir
这可以防止SBT在每次清理时都吹掉deps缓存,这样可以减少干净/编译周期几秒钟 - 一个很好的&amp;轻松WIN,就像我们在SBT&lt; = 0.12.4
中使用cacheDirectory一样答案 1 :(得分:0)
在我的案例中,只需将target
更改为cacheDirectory <<= baseDirectory / "sbt-no-clean"
即可:
来自:
target <<= baseDirectory / "sbt-no-clean"
到
var user = [37, 2, 987, 53, 3322, 12, 9];
function check(item) {
console.log(item + ' has type ' + typeof item);
if (item !== 'number') {
return true;
} else {
return false;
}
}
console.log(user.some(check));
/* Result:
37 has type number
true
*/