我正在使用Compojure 1.6.0构建一个Web应用程序。对于第三方JS库,我使用npm安装它们,这会将它们放在名为node_modules
(不可自定义)的文件夹中。为了服务他们,我这样做:
(route/files "/node_modules" {:root "node_modules/"})
在开发中效果很好。为了进行生产,我部署了uberwar,因此在进行战争之前,我只是将这些文件复制到公共资源中:
# deploy.sh
cp -r node_modules/ resources/public/node_modules/
lein ring uberwar
一切正常。
现在,我想将URI路径更改为说/static/
而不是/node_modules/
。我尝试将路由更改为:
(route/files "/static" {:root "node_modules/"})
,然后更新所有指向这些URI的HTML引用。这在开发(lein ring server-headless
)中按预期方式工作,但是在生产(部署的warfile)中却失败了。在route/not-found
下的任何路径都将调用我的/static/
处理程序。
有什么作用?为什么URI路径仅在一个环境中与此有关?
答案 0 :(得分:0)
我使用的是wrap-defaults
(对于任何非平凡的网页来说似乎都是强制性的),默认情况下会添加route/resources
。那是开发人员的禁忌之选,但导致产品按名称查找node_modules
。
这确实不是问题,但确实掩盖了实际问题。当我更改route/files
调用时,它更改了dev的行为,但是在prod中没有使用。
我不知道什么是正确的解决方案,但是现在我要在:static
中禁用wrap-defaults
,并向{{ 1}}和route/files
我自己,所以我对此拥有完全的控制权。