Vue-Cli:htmlWebpackPlugin 的“标题”选项不起作用

Posted

技术标签:

【中文标题】Vue-Cli:htmlWebpackPlugin 的“标题”选项不起作用【英文标题】:Vue-Cli: 'title' option for htmlWebpackPlugin does not work 【发布时间】:2019-07-23 20:48:46 【问题描述】:

我正在使用 vue-cli (3.4.1),我正在尝试简单地更改文档的标题。

我在 vue.config.js 中添加了以下内容

    chainWebpack: (config) => 
        config
          .plugin('html')
          .tap((args) => 
            args[0].title = 'Custom Title';
            return args;
          );
      ,

并使用 vue inspect --plugin html 检查 webpack 配置,得到以下输出

    /* config.plugin('html') */
    new HtmlWebpackPlugin(
      
        templateParameters: function ()  /* omitted long function */ ,
        template: '<path>\node_modules\\@vue\\cli-service\\lib\\config\\index-default.html',
        title: 'Custom Title'
      
    )

Webapp 的标题仍然是“Vue App”。

有什么想法吗?

PS:我不想在我的应用中设置document.title = 'Custom Title'。我希望在构建时更改文档&lt;head&gt; 元素中&lt;title&gt;-tags 之间的标题。

【问题讨论】:

这可能是一个错误。我推荐reporting it。 【参考方案1】:

不幸的是,上述答案对我没有帮助。 如in the offical documentation 所述,您只需将vue.config.js 添加到您的根文件夹并添加以下内容:

    // vue.config.js
    module.exports = 
      chainWebpack: config => 
        config
        .plugin('html')
        .tap(args => 
          args[0].title = 'Your new title'
          return args
        )
      
    

请记住,您必须停止应用程序并使用npm run serve 重新开始。这对我有用。

【讨论】:

【参考方案2】:

我无法从 webpack-config 更改标题,我假设 vue-cli 稍后会覆盖配置中的标题。对我有用的是在.env 中设置VUE_APP_TITLE=&lt;custom title&gt; 并在index.html 中使用&lt;title&gt;&lt;%= process.env.VUE_APP_TITLE %&gt;&lt;/title&gt;。 Source

【讨论】:

【参考方案3】:

根据configuration reference of the Vue CLI,您可以通过覆盖vue.config.js 中的页面部分来设置标题。由于除了 entry 之外所有配置选项都是可选的,所以应该这样做:

module.exports = 
  pages: 
    index: 
      entry: 'src/index/main.js',
      title: 'Custom Title'
    
  

【讨论】:

这个对我来说很完美!我只需要将entry 路径修改为我的入口文件的设置方式。 这对我来说也很好用。我只需要重新启动我的 docker 容器。 这是达到预期结果的最简单方法【参考方案4】:

您可以通过在 vue-cli 应用程序的根目录中设置 package.json 中的 "name" 属性来设置 HtmlWebpackPlugin 使用的标题。不需要chainWebpack只是为了改变标题。

【讨论】:

这确实有效,但 package.json 名称仅限于 lower-case_hypens-and-underscores【参考方案5】:

要设置 vue-cli 应用程序的标题,您可以在 HtmlWebpackPlugin 中设置标题(就像您一样)

/* vue.config.js */
chainWebpack: (config) => 
    config
      .plugin('html')
      .tap((args) => 
        args[0].title = 'Custom Title';
        return args;
      );
  ,

那么您必须编辑public/index.html&lt;title&gt; 以使用lodash 语法引用标题。

<!-- public/index.html -->
<head>
  <title><%= htmlWebpackPlugin.options.title %></title>
</head>

查看 Html Webpack 插件的documentation,了解如何编写自己的模板!

希望这会有所帮助!

【讨论】:

【参考方案6】:

我按照@tony19 的建议提交了一份错误报告。

tldnr:在模板中编辑 public/index.html 的标题,将在构建时使用。

长版:我的项目中不再有public/index.html,显然我前段时间删除了它,因此从未使用过模板功能。 cli 仍然使用位于某处的模板,因此对 htmlWebpackPlugin 的所有更改都不起作用。

因此,要么禁用 index.html 模板并修改 htmlWebpackPlugin,要么编辑模板以进行更改。

【讨论】:

以上是关于Vue-Cli:htmlWebpackPlugin 的“标题”选项不起作用的主要内容,如果未能解决你的问题,请参考以下文章

取消vue-cli打包自动压缩代码的方法

webpack/HtmlWebpackPlugin 错误:无效的配置对象

使用 HTMLWebpackPlugin 时如何通过 webpack 加载图片?

入口点未定义 = index.html 使用 HtmlWebpackPlugin

如何将 Webpack 4 SplitChunksPlugin 与 HtmlWebpackPlugin 一起用于多页应用程序?

使用create-react-app的其他HtmlWebpackPlugin()页面