比较静态资源在开发中工作,但在生产中不起作用



我正在使用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 中使用。

我不知道正确的解决方案是什么,但现在我正在禁用:staticwrap-defaults,并拨打一对匹配的调用来route/filesroute/resources自己,所以我可以完全控制这一点。

最新更新