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目录下的直接文件,可先尝试更明确的规则测试:
直接指定文件名,确认是否能被Hakyll识别。match "js/script.js" $ do route idRoute compile copyFileCompiler
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
相关产品推荐
相关产品推荐

