76

我想为使用 vue cli 3 创建的网页设置标题,因此查看了public/index.html. 在那里,我发现<title><%= htmlWebpackPlugin.options.title %></title>.

如何htmlWebpackPlugin.options.title在 vue cli 3 项目中设置和修改?

4

6 回答 6

108

鉴于问题的受欢迎程度,我决定添加一个带有参考的详尽答案,以使其更加真实和完整。我还创建了一篇关于这个主题的文章,并在本课程和本课程中涵盖这个主题

虽然问题是寻找设置htmlWebpackPlugin.options.title,但最终的效果是改变网页的标题。

1.最方便和最简单的解决方案

最简单的方法是修改public/index.html标题并对其进行硬编码。

<!DOCTYPE html>
<html lang="">

<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 %>favicon.ico">
    <title>
        <%= htmlWebpackPlugin.options.title %>
    </title>
</head>

<body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
</body>

</html>

public/index.html这是vue cli 生成的默认值。而在这一点上,你只需要改变

    <title>
        <%= htmlWebpackPlugin.options.title %>
    </title>

<title>Title of your choice</title>

2.更改name字段package.json

另一个简单的解决方案是更改"name": "your-project-name". 但是,name您可以在package.json. 您可以在此处阅读有关此内容的更多信息。基本上,package.json必须包含一个名称,并且必须是小写字母和一个单词,并且可以包含连字符和下划线。

3. 使用pages字段vue.config.js

vue.config.js是一个可选文件,你可以添加它来为 Vue CLI 提供额外的配置,并且这个文件(如果存在)将由 Vue CLI 自动加载。您需要vue.config.js在根文件夹中创建 - 包含您的文件的文件夹package.json

根据Vue 文档,您可以使用 pages 字段来定义多页应用程序的入口点。但是,您也可以使用它来定义单页应用程序的标题。在根目录中创建vue.config.js并将pages字段添加到您的导出中,如下所示:

module.exports = {
  pages: {
    index: {
      // entry for the page
      entry: 'src/main.js',
      title: 'My Title',
    },
  }
}

请注意,如果您已经在运行开发服务器,则只有在您停止并重新启动开发服务器时才会反映此更改。换句话说,这些更改不会被热重载。

4. 链接 Webpack

您可以链接 Webpackvue.config.js如下所示

module.exports = {
    chainWebpack: config => {
        config
            .plugin('html')
            .tap(args => {
                args[0].title = "My Vue App";
                return args;
            })
    }
}

请注意,与解决方案 3 类似,仅当您停止并重新启动开发服务器时才会反映此更改,以防您已经在运行开发服务器。换句话说,这些更改不会被热重载。

5. 使用 JavaScript 修改生命周期钩子中的标题

列表中的下一个解决方案是使用 JavaScript 修改标题。您可以在mounted根组件的生命周期挂钩中执行此操作,或者如果您希望为不同的路由提供不同的标题,您可以对每个路由加载的组件执行相同的操作。

<script>
export default {
  data() {
    return {
      //
    };
  },
  mounted() {
    document.title = 'new title'
  }
}
</script>

6. 使用 Vue 元

最后,您可以使用Vue Meta来管理 Vue 应用程序的所有元数据,包括标题。首先,您需要将 Vue Meta 添加到您的项目中,然后使用metaInfo如下所示的字段为您的页面或路由配置元数据。

{
  metaInfo: {
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { title: 'My title'}
    ]
  }
}

结论

前 4 个解决方案是更改标题的静态方法,换句话说,您不能在运行时使用这些方法更改标题。此外,所有这些都不是热重装的。最后两个选项使用 JavaScript 并且可以在运行时操作标题。

于 2021-06-05T04:13:41.857 回答
57

vue.config.js在根目录创建文件

//vue.config.js
module.exports = {
    chainWebpack: config => {
        config
            .plugin('html')
            .tap(args => {
                args[0].title = "My Vue App";
                return args;
            })
    }
}

https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-plugin

于 2020-08-15T12:34:34.427 回答
18

更新package.json文件中的name属性

{
  "name": "URL-friendly_app-name",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build"
  },
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
}

更新:上述方法仅在您使用 URL 友好标题时才有效。

还有其他几种方法可以做到这一点

.env(或任何 .env.[mode])

VUE_APP_NAME=Application flixible name

这就是您在应用程序的不同位置调用它的方式

AnyComponent.vue(作为数据属性)

打字稿

appName: string = process.env.VUE_APP_NAME

Javascript

appName: process.env.VUE_APP_NAME

anyHTML.html

<%= process.env.VUE_APP_NAME %>
于 2020-10-20T01:59:42.027 回答
0

如果您使用的是vue-pwa插件,name则在site.webmanifest文件中设置。

于 2021-01-26T02:45:08.417 回答
0

htmlWebpackPlugin.options.title我只是为这样的东西赋值。

<!DOCTYPE html>
<html lang="">
  <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 %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title="WebStore" %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
    <script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
    <script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
  </body>
</html>
于 2021-07-01T03:55:08.400 回答
0

简单,我认为最好的方法是更新 packer.json 中的名称需要重新启动您的应用程序

package.json 文件:

{
  "name": "my title app",
}
于 2022-02-08T15:25:37.297 回答