.js
和.css
文件小型化的常见做法是创建.min.js
和.min.css
文件。问题是摇动 FilePatterns将使用类似于//*.js
的模式将缩小的和非缩小的文件与此方案相匹配。文档似乎建议为reg.js
和min.js
等每一个都做唯一的扩展,但我不确定这是我想要走的一条路。这怎么能在沙克工作呢?
编辑:问题在于使用getDirectoryFiles
js <- getDirectoryFiles "" ["//*.js"]
let jsMins = map (-<.> "min" <.> "js") js
need jsMins
"//*.min.js
有一个可以正常工作的目标,但是getDirectoryFiles "" ["//*.js"]
开始收集生成的.min.js
文件。
发布于 2014-03-30 10:53:56
我可以想到两种不同的方法:
getDirectoryContents
后处理
调用getDirectoryContents
,然后筛选出您不关心的值。类似于:
xs <- getDirectoryFiles "" ["//*.js"]
need [x -<.> "min.js" | x <- xs, takeExtensions x == ".js"]
如果您在规则之外运行此代码,例如在action
中,那么它是100%正确的。如果您在规则中运行代码,则该规则将运行一次,新文件将出现,然后该规则将再次运行(这也是林特违规行为,而不是重大的构建hygine)。我怀疑您超出了一条规则,所以这种方法可能是一个很好的方法。
编写Oracle
如果您在规则中,您可以定义一个类似于getDirectoryFiles
的Oracle,但可以跳过min
文件。
newtype JsFiles = JsFiles () deriving (Show,Typeable,Eq,Hashable,Binary,NFData)
addOracle $ \(JsFiles _) -> fmap (\x -> takeExtensions x == ".js") $ getDirectoryFiles "" ["//*.js"]
现在,您可以在您的规则中使用askOracle $ JsFiles ()
,并且只有在添加了新的非min
文件时,它才会改变。
发布于 2014-03-29 11:41:12
有几种方法可以为.js
和.min.js
编写不同的生成规则
.js
或.css
文件,只使用现有源文件,因此不需要//*.js
规则,那么只需将最小化模式改为//*.min.js
即可。.js
(例如从CoffeeScript文件生成),那么如果要在不同目录中生成.min.js
和.js
文件,则可以在该级别上区分模式,例如dist/*.min.js
、decafinate/*.js
。?>
模式:
(\x -> takeExtensions x == ".js") ?> \out -> ...
请注意,takeExtensions
(带有尾随的s
)只匹配扩展名为.js
的文件,因此不匹配myfile/test.min.js
。如果解决方案1有效,请使用它(这是最简单的)。如果解决方案2自然出现(例如,这与您想要做的事情相匹配),那么拥有更多限制性模式会更容易,但是选项3“只起作用”--所以我可能会这样做。
请注意,p *> a
被定义为(p ?==) ?> a
(加上许多额外的管道以获得良好的错误消息!),因此?>
没有什么特别之处,并且可以很好地处理现有规则。我通常发现大约5-10%的规则使用?>
模式。
https://stackoverflow.com/questions/22735289
复制相似问题