标签:minify shake-build-system css javascript haskell
缩小.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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。