如何在vue.js webpack项目中正确设置favicon.ico?

121

我使用 vue-cli 创建了一个 vue webpack 项目。

vue init webpack myproject

然后在dev模式下运行该项目:

npm run dev

我遇到了这个错误:

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/favicon.ico

那么在webpack中,如何正确地导入favicon.ico


2
你试过直接将它放到站点的根目录下吗?或者放在公共构建文件夹中? :) - Benjamin
7个回答

180

请查看webpack模板项目结构:https://vuejs-templates.github.io/webpack/structure.html

请注意,它包含一个名为static的文件夹,以及node_modules、src等文件夹。

如果您将一些图像文件(如favicon.png)放入static文件夹中,则可以通过http://localhost:8080/static/favicon.png访问到该图像文件。

以下是静态资源的文档:https://vuejs-templates.github.io/webpack/static.html

对于您的favicon问题,您可以将favicon.ico或favicon.png放入static文件夹中,并在index.html的标签中引用它,如下所示:

<head>
    <meta charset="utf-8">
    <link rel="shortcut icon" type="image/png" href="/static/favicon.png"/>
    <title>My Vue.js app</title>
    ...
</head>
如果在你的index.html里没有定义favicon.ico,则浏览器将从网站根目录请求一个favicon(默认行为)。如果按照上述方式指定了favicon,您将不再看到404错误。此外,该网站的标题栏也会开始显示出favicon。

另外,我更喜欢使用PNG格式而不是ICO文件,原因可以参考这篇文章:favicon.png vs favicon.ico - why should I use PNG instead of ICO?


1
如果我想将网站图标保留在src/assets文件夹中,最好是将其与.gitkeep一起放在static文件夹中吗? - Akin Hwan
4
@AkinHwan 我还没有尝试过,但如果您将任何图像放在src/assets中,它将被视为模块依赖项,并以内联图像(base64格式)的形式进入最终构建文件中。这会不必要地增加构建大小。不用担心,它不会以任何方式影响性能。我更喜欢将图像作为“真实静态资产”保存,如文档中所解释的那样。您的偏好可能会有所不同。您需要尝试两种方法并选择适合您的那个。 - Mani
21
这个答案似乎有点过时了。在当前的 Vue webpack 模板中,有一个名为 public 的目录,而不是 static 目录。 - JakeParis
@JakeParis 同时,使用“shortcut”在链接关系中仅适用于Internet Explorer浏览器。 - Caine Nielsen
这个路由是有效的,但对于直接链接它不起作用。 - Nazmul81

23

由于某种原因,在将默认的favicon.ico文件转换为favicon.png并将其重命名为favicon-xyz.png之前,以上解决方案对我没有起作用(例如我已将此文件放在/public文件夹中),并且按照如下所示编辑了index.html文件:

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="icon" href="<%= BASE_URL %>favicon-xyz.png">
    .
    .
    .
</head>

对某些人可能有用。


它对我很好用。只需要在删除原始图标后,将我的自定义“favicon”图标放入“/public”文件夹中即可。 - Sobhani
这个工作得相当奇怪,但效果不错。 - MK.

14

更新Laravel 5/6/7/8/9,将您的favicon.icofavicon.png放置于/public文件夹中,并像这样在您的index.html中引用它:

<head>
    <meta charset="utf-8">
    <link rel="shortcut icon" type="image/png" href="/favicon.png"/>
    <title>My Vue.js app</title>
    ...
</head>

希望这能帮助到你!


7

1

1
只需像这样在rel标记中添加shortcut
<link rel="shortcut icon" href="<%= BASE_URL %>favicon.ico">

0

谢谢。根据eightballs的评论,这个方法很管用。我需要将文件移动到/public文件夹并重命名它:D

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>gear.png">
    <title>Prodigy</title>
</head>

请不要将“谢谢”作为答案。一旦您拥有足够的声望,您就可以投票支持有用的问题和答案。- 来自审核 - treckstar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接