编程语言
首页 > 编程语言> > JavaScript-如何使用Shake FilePatterns缩小JS和CSS文件?

JavaScript-如何使用Shake FilePatterns缩小JS和CSS文件?

作者:互联网

缩小.js和.css文件的常见做法是创建.min.js和.min.css文件.问题是Shake FilePatterns将使用这种模式(如//*.js)匹配最小文件和未最小文件. docs似乎建议对reg.js和min.js之类的文件进行独特的扩展,但是我不确定这是我要采用的方法.在Shake中如何解决?

编辑:问题是使用getDirectoryFiles:

js <- getDirectoryFiles "" ["//*.js"]
let jsMins = map (-<.> "min" <.> "js") js
need jsMins

“ //*.min.js”有一个可以正常工作的目标,但getDirectoryFiles“” [“ //*.js”]开始拾取生成的.min.js文件.

解决方法:

我可以想到两种替代方法:

发布过程getDirectoryContents

调用getDirectoryContents,然后过滤掉不需要的值.就像是:

xs <- getDirectoryFiles "" ["//*.js"]
need [x -<.> "min.js" | x <- xs, takeExtensions x == ".js"]

如果您在规则之外运行此代码,例如在一个动作中,那是100%正确的.如果您在规则中运行代码,则该规则将运行一次,新文件将出现,然后该规则将再次运行(这也是棉绒违规行为,不是很好的构建hygine).我怀疑您的做法超出了常规,因此这种方法可能是一种很好的方法.

写一个Oracle

如果您在规则内,则可以定义一个类似于getDirectoryFiles的Oracle,但是跳过最小文件.

newtype JsFiles = JsFiles () deriving (Show,Typeable,Eq,Hashable,Binary,NFData)
addOracle $\(JsFiles _) -> fmap (\x -> takeExtensions x == ".js") $getDirectoryFiles "" ["//*.js"]

现在,您可以在规则中使用askOracle $JsFiles(),并且只有在添加新的非min文件时它才会更改.

标签:minify,shake-build-system,css,javascript,haskell
来源: https://codeday.me/bug/20191029/1962079.html