【发布时间】:2020-01-09 13:48:26
【问题描述】:
我的 python 后端服务器将 react 应用程序作为静态文件提供服务。 在反应中,当我们构建应用程序时,src 目录中的所有内容都被捆绑在一起,但是,src 之外有一个 javascript 文件,在 public 目录中,我把它留在那里,因为我想在构建后保持不变。我这样做的原因是因为在 src 代码中,我创建了 Workers,并且要创建 worker,我们必须指定 worker 文件的 url。这个文件叫做worker.js,构建后保持不变,但是部署后端后,前端无法访问/worker.js url,因为显然django只提供静态文件,所以/worker.js无法识别并且索引.html 改为返回。如何才能访问这个非静态的 js 文件?
【问题讨论】:
-
我不明白。 “静态”的定义是文件按原样提供给您的浏览器,而动态的响应是计算/构造(django视图所做的)。所以你如何描述它,“worker.js”只是另一个静态文件。 “django 只提供静态文件”也是不正确的,实际上 django 根本不应该提供静态文件,除非在开发模式下。
-
您可以将您的静态文件(包括worker.js)放在您想要的任何目录中。如果它位于您的一个 django 应用程序内的
static/目录中,django 会找到它,只需确保访问它的 url 以您的STATIC_URL为前缀。如果它在您项目的任何其他目录中,将该目录添加到STATICFILES_DIRS以便 django 可以找到它。在开发中就是这样。在生产中,在您collectstatic之后,您的所有静态文件都被复制到STATIC_ROOT中,您需要确保您的 Web 服务器 (apache/nginx) 找到它们(因为 Django 不提供静态文件) . -
“只要确保访问它的 url 以你的 STATIC_URL 为前缀”你能澄清一下吗?
-
好吧,既然worker.js 是一个静态文件,需要用“/static/”开头的url来获取它(假设STATIC_URL =“/static/”) ,例如“/static/root-js/worker.js”。 “root-js/”是放置 worker.js 的静态目录之一中的文件夹(您可以随意命名,它不能与其他静态文件夹中的其他文件夹冲突)并且可以是另一个文件夹而不是 where你还有其他的 js 文件。
-
对。然后发生的事情是 webpack 构建生成了一个“静态”文件夹和其他未捆绑的文件。我的 STATIC-ROOT 是这个静态文件夹,所以其他文件被忽略了。我可以将静态文件夹及其父文件夹都添加为 STATICFILES_DIRS 还是会发生冲突?我不想一直在静态文件夹中手动添加worker.js
标签: python django reactjs webpack create-react-app