在css背景图像中反应公共文件夹的路径

Posted

技术标签:

【中文标题】在css背景图像中反应公共文件夹的路径【英文标题】:React path to public folder in css background image 【发布时间】:2019-11-28 08:58:33 【问题描述】:

我正在使用 Create-React-App,我想为我的标题部分添加背景图片,我正在这样做:

background-image: url('~/Screenshot_11.png');

在此之后我收到此错误:

./src/styles/main.scss (./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-5-1!./node_modules/postcss-loader/src??postcss!./node_modules/sass-loader/lib/ loader.js??ref--6-oneOf-5-3!./src/styles/main.scss) 未找到模块:您尝试导入 ../../../../../../../Screenshot_11.png 不在 项目 src/ 目录。 src/ 之外的相对导入不是 支持。

我已经在 package.json 中设置了主页

"homepage": "http://localhost:3000",

在我的旧项目中有效,但今天我无法正确导入。

【问题讨论】:

~ 通常指向您操作系统上的默认位置(我认为)。你试过这个:background-image: url('./Screenshot_11.png'); 也不工作 【参考方案1】:

他们已经改变了,但我不知道为什么。工作路径:

background-image: url('/Screenshot_11.png');

编辑 2021

对于那些认为它不起作用的人:

https://codesandbox.io/s/agitated-turing-gsnr3

【讨论】:

这对公用文件夹中的图像仍然不起作用。 您需要在开发者工具中查看您的网络选项卡,看看您请求的路径可能对您有所帮助 对于像我这样努力使他们在 SRC 文件夹中的 CSS 与他们在 PUBLIC 文件夹中的图像一起工作的人,请参阅建议背后的解释,将图像移动到 SRC 文件夹 github.com/facebook/create-react-app/issues/… 如在链接,“您不应该在公共场合需要图像;构建过程将在编译时将图像从 src/ 复制到 build/ (并相应地更新路径)。” @JamesHubert 请在这不起作用时向我们发送一个示例【参考方案2】:

您可以将该图像导入为

import Background from './Screenshot_11.png'

并使用

background-image: `url($Background)`

【讨论】:

帮助我处理 react-scripts v4 和 styled-components。谢谢。【参考方案3】:

这仍然不适用于公用文件夹中的图像。

2021 年 3 月 19 日更新

关于在.css文件中使用

这似乎是 create-react-app (react-scripts) 包 v4.x 中的重大更改(将被视为错误?)。 更准确地说,在包 'css-loader' v4.x 中。 3.x 分支可以正常工作。

这里是github repo上对应的issue:https://github.com/facebook/create-react-app/issues/9870 (实际上还有更多)。

没有修复(还)。 (会吗?..) 但是那里提到了一些解决方法。 使用哪一个...这取决于你的项目,我想。

一些解决方法:

降级到 react-scripts 3.4.x

不要在 CSS 文件中使用 url :) 你仍然可以在 .JSX(内联样式)中使用。或放入.html。它们显然没有被 css-loader 处理。

重新配置 webpack 以将 url:false 添加到 css-loader 选项(弹出 CRA 或使用此:https://github.com/gsoft-inc/craco 或此:https://github.com/timarney/react-app-rewired (您可以在 github 问题页面找到示例配置)

使用 css-loader 的这个新特性https://github.com/webpack-contrib/css-loader/pull/1264 (发布于 5.1.0,当前最新版本是 5.1.3;要使用该版本,您可以将以下内容添加到 package.json:“resolutions”:“css-loader”:“5.1.3”(在根级别))

【讨论】:

以上是关于在css背景图像中反应公共文件夹的路径的主要内容,如果未能解决你的问题,请参考以下文章

在利用资产管道的 Rails 应用程序中,用于 css 文件中背景图像的正确路径是啥?

如何从 React 中的公共文件夹设置背景图像(创建 React 应用程序)

我使用啥路径在codeigniter中调用背景图像

当 ng 服务 Angular 应用程序时,不考虑在组件 css 中配置的背景图像的相对路径

在 laravel 5 中添加背景图片

反应内联背景图像