标签导航:

在vue cli项目中高效复用公共模板

Vue CLI构建的项目中,经常会遇到多个页面需要使用相同HTML结构的情况,例如页头、页脚等公共部分。重复编写这些代码不仅费时费力,而且不利于维护。本文将介绍一种方法,有效地将公共HTML模板引入Vue CLI项目中的模板文件中,从而避免代码冗余。

核心问题在于如何在Vue CLI生成的index.html文件中引入一个外部的公共HTML文件,例如一个包含页头信息的header.html文件。直接在index.html中使用或类似的标签是不可行的,因为Vue CLI的构建流程会处理这个文件。

解决方案是利用vue.config.js文件和html-webpack-plugin插件(虽然问题答案中提到了,但此处不展开该插件的细节)。 我们可以通过修改Vue CLI的webpack配置,在构建过程中动态地将公共HTML文件的内容插入到index.html中。

首先,创建一个名为header.html的文件,并将需要作为公共模板的HTML代码放入public文件夹下。例如:

<!-- public/header.html -->
<header>
  <h1>我的公共页头</h1>
  <nav>...</nav>
</header>

然后,修改vue.config.js文件,添加如下代码:

const fs = require('fs')
const header = fs.readFileSync('./public/header.html').toString()

module.exports = {
    runtimeCompiler: true,
    css: {
        loaderOptions: {
            less: {
                lessOptions: {
                    javascriptEnabled: true
                }
            }
        }
    },
    chainWebpack: (config) => {
        config.plugin('html').tap((args) => {
            args[0].header = header

            return args
        })
    }
}

这段代码首先读取public/header.html文件的内容,然后利用chainWebpack方法修改html-webpack-plugin的配置,将读取到的内容赋值给htmlWebpackPlugin.options.header。

最后,修改public/index.html文件,在

标签中添加,这将会在构建过程中被替换成header.html的内容:
<!DOCTYPE html>
<html>
<head>
  <!-- ... -->
</head>
<body>
    <%= htmlWebpackPlugin.options.header %>
    <div id="app"></div>
</body>
</html>

通过以上步骤,公共HTML模板就能被成功引入到Vue CLI项目的主模板文件中,实现代码复用,提高开发效率。 需要注意的是,这种方法依赖于html-webpack-plugin插件的默认行为,如果使用了其他的插件或自定义了构建流程,可能需要调整代码。