19

我正在使用 Heroku 部署 NodeJs 应用程序。除了提供静态文件的小问题外,一切正常。

我有以下配置

app.use(express.static(__dirname + '/htdocs'));

它工作正常,除非我尝试提供位于子文件夹中的静态文件。

www.example.com/bar.js // 这服务于文件 /htdocs/bar.js

www.example.com/foo/bar.js // 这找不到文件 /htdocs/foo/bar.js

我忘了说在我的本地环境中一切正常,可能与heroku有关,但我找不到原因。以前有人遇到过这个问题吗?解决方案?

谢谢!

4

6 回答 6

14

最后我找到了解决方案。

我解决了在我的 package.json 中添加 npm 版本的问题。

{
    "name": "bla",
    "version": "0.0.1",
    "dependencies": {
        "express": "3.2.6"
    },
    "engines": {
        "node": "0.10.11",
        "npm": "1.2.25"
    } 
}
于 2013-06-21T05:30:22.597 回答
10

显然,正如在这个问题中所解释的那样:Heroku(Cedar) + Node + Express + Jade Client-side javascript files in subdirectory with foreman+curl 在本地工作,但在推送到 Heroku 时不能使用,您不能将 __dirname 与 Heroku 一起使用。

替代方案似乎是:

// 在 web.js 的顶部
process.env.PWD = process.cwd()

// 然后
app.use(express.static(process.env.PWD + '/htdocs'));

于 2013-06-20T12:23:26.043 回答
9

如果这些解决方案都不起作用,请检查我的解决方案

确保将目录的子目录添加到 Git 存储库。

于 2017-08-03T06:04:09.830 回答
1

我通过从.gitignore文件中删除公用文件夹解决了我的问题。我不知道它在那里做什么。

于 2020-07-26T13:24:53.950 回答
0

我为此苦苦挣扎了一段时间,不得不恢复使用 /public(来自 /dist)作为静态文件夹 - 现在完美运行

于 2016-09-22T06:14:54.150 回答
0

在我的例子中,我在构建中有一个步骤实际上是清除/public文件夹,然后添加回 bundle.js 和 bundle.css。

所以在我的本地我没有看到它,但是当它被部署到 Heroku 时,资产丢失了。

于 2016-09-30T19:13:16.483 回答