我正在使用Compojure 1.6.0构建一个Web应用程序。 对于第三方 JS 库,我使用 npm 安装它们,这会将它们放在名为node_modules
(不可自定义(的文件夹中。 为了服务他们,我这样做了:
(route/files "/node_modules" {:root "node_modules/"})
这在开发中工作正常。 对于生产,我部署了一个 uberwar,所以在创建 war 之前,我只需将这些文件复制到公共资源中:
# 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
(中按预期工作,但在生产(部署的战争文件(中失败。 我的route/not-found
处理程序被调用用于/static/
下的任何路径。
什么给? 为什么 URI 路径与此有任何关系,并且仅在一个环境中?
我正在使用wrap-defaults
(对于任何非平凡的网页来说,这似乎是强制性的(,默认情况下它会添加route/resources
。 这在开发中是一个没有操作,但导致 prod 按名称查找node_modules
。
确切地说,这不是问题,但它确实隐藏了实际问题。 当我更改route/files
调用时,它改变了 dev 的行为,但这并没有在 prod 中使用。
我不知道正确的解决方案是什么,但现在我正在禁用:static
wrap-defaults
,并拨打一对匹配的调用来route/files
和route/resources
自己,所以我可以完全控制这一点。