You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hakyll编译时未拾取JavaScript文件问题求助

排查Hakyll不复制JS文件的问题

1. 检查全局忽略规则

查看你的site.hs是否存在全局ignoreFile配置,比如:

ignoreFile = return . (`elem` [".gitignore", "node_modules"])

若规则中意外包含.js相关路径或文件,会导致JS文件被跳过,需确保JS文件不在忽略列表内。

2. 验证匹配语法与Hakyll版本兼容性

不同版本Hakyll的glob匹配逻辑略有差异:

  • 若使用Hakyll 4.x,"js/*"应能匹配js目录下的直接文件,可先尝试更明确的规则测试:
    match "js/script.js" $ do
        route idRoute
        compile copyFileCompiler
    
    直接指定文件名,确认是否能被Hakyll识别。

3. 查看构建日志细节

运行构建命令(如stack exec site build或cabal run site build)时,仔细观察输出。若JS文件被处理,会出现Processing js/script.js类的记录;若无此记录,说明Hakyll未检测到该文件。

4. 处理文件扩展属性

你的文件权限带有@标记,这是macOS的扩展属性(如隔离属性),可能干扰Hakyll的文件检测逻辑,执行以下命令移除属性:

xattr -d com.apple.quarantine js/script.js

之后重新构建站点,验证文件是否能被复制。

5. 排查冲突的match规则

确保JS文件的匹配规则未被后续规则覆盖,若存在类似如下代码,会直接忽略所有JS文件,需删除或调整规则顺序:

match "**/*.js" $ ignore

6. 强制清理缓存

Hakyll会缓存已处理文件,即使手动删除_site,缓存仍可能残留。执行以下命令完全清理后重新构建:

rm -rf _cache _site
stack exec site build

内容的提问来源于stack exchange,提问作者equanimitus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:57:37