Node.js 在Heroku上部署NodeJ无法提供位于子文件夹中的静态文件

Node.js 在Heroku上部署NodeJ无法提供位于子文件夹中的静态文件,node.js,heroku,express,static-files,Node.js,Heroku,Express,Static Files,我正在使用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部署一个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有关,但我找不到原因。以前有人有过这个问题吗?解决方案


谢谢

显然,正如在这个问题中所解释的:,你不能将_dirname与Heroku一起使用

另一种选择似乎是:

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

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


最后我找到了解决办法

我解决了这个问题,只需在我的package.json中添加npm版本

{
    "name": "bla",
    "version": "0.0.1",
    "dependencies": {
        "express": "3.2.6"
    },
    "engines": {
        "node": "0.10.11",
        "npm": "1.2.25"
    } 
}

我为此挣扎了一段时间,不得不恢复使用/public(from/dist)作为静态文件夹-现在可以完美地工作了

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


因此,在我的本地服务器上,我没有看到它,但当它部署到Heroku时,资产丢失了。

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

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


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

嘿!我已经找到了,但没用。。。但我现在真的找到了灵魂!!!这只是我的package.json,我忘了放npm版本,我不知道为什么,但这解决了整个问题。谢谢我猜是因为Heroku需要它来下载正确版本的NPM。默认情况下,它应该下载一个非常旧的。我们不知道接下来会发生什么:)我已经在package.json中添加了一个npm版本,并完成了这个解决方案。还是不行,这对我很有效。我忽略了.gitignore中的/dist目录。我删除了它,静态文件链接按预期工作