Skip to content

Vue多页项目使用swig模板引擎 #47

Description

@webplus

layout.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    {% block title %}
    <title>标题</title>
    {% endblock %}
    <meta http-equiv="x-dns-prefetch-control" content="on">
    <link rel="dns-prefetch" href="//cdn.tb.com.cn">
    <meta name="renderer" content="webkit">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content="telephone=no,email=no" name="format-detection">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    {% block meta %}
    <meta name="keywords" content="keywords">
    <meta name="description" content="description">
    {% endblock %}
    {% block style %}{% endblock %}
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
    <!-- CDN公共文件 -->
    <!-- <script type="text/javascript" src="{{ config.env.CDN_DOMAIN }}/app_js/??libs/echarts/4.2.1/echarts.min.js,libs/zepto/1.2.0/zepto.min.js,libs/bscroll/1.12.4/bscroll.min.js"></script> -->
    <!-- 使用lib文件 -->
    {% if config.env.APP_ENV === 'development' %}
    <!-- <script type="text/javascript" src="{{ config.env.PUBLIC_PATH }}/assets/libs/vue.js?t={{ config.env.TIME_STAMP }}"></script> -->
    {% else %}
    <!-- <script type="text/javascript" src="{{ config.env.PUBLIC_PATH }}/assets/libs/vue.min.js?t={{ config.env.TIME_STAMP }}"></script> -->
    {% endif%}
  </body>
</html>

index.html

{% extends '../../template/layout.html' %}
{% block title %}
  <title>产品详情</title>
{% endblock %}

{% block meta %}
  <meta name="keywords" content="产品详情">
  <meta name="description" content="产品详情">
{% endblock %}

vue.config.js

const swigLoader = require('swig-loader')

// html相关变量配置注入
swigLoader.resourceQueryCustomizer(function (resourceQuery, templatepath) {
  resourceQuery.config = {
    env: utils.env
  }
  return resourceQuery
})


// html插件
      console.log('\n\n')
      for (const name in pages) {
        config.plugins.delete(`preload-${name}`)
        config.plugins.delete(`prefetch-${name}`)
        config.plugin(`html-${name}`).tap(options => {
          options[0].minify = false
          console.log(options)
          return options
        })
      }
      console.log('\n\n')

utils.js

const PUBLIC_PATH = process.env.VUE_APP_BASE_PATH
const CDN_DOMAIN = process.env.VUE_APP_CDN
const APP_ENV = process.env.VUE_APP_ENV
const TIME_STAMP = Date.now()

exports.env = {
  APP_ENV,
  BASE_API,
  PUBLIC_PATH,
  CDN_DOMAIN,
  TIME_STAMP
}

// 生成pages
exports.htmlPlugin = function () {
  let pages = {}
  glob.sync('./src/pages/*/main.js').forEach(filepath => {
    let filelist = filepath.split('/')
    let fileName = filelist[filelist.length - 2]
    pages[fileName] = {
      entry: `src/pages/${fileName}/main.js`,
      template: filepath.split('/main.js')[0] + '/index.html',
      filename: `${fileName}.html`,
      chunks: ['chunk-vendors', 'chunk-common', fileName]
    }
  })
  return pages
}

.env.development

NODE_ENV=development
VUE_APP_ENV=development
VUE_APP_CDN=https://cdn.tb.com.cn
VUE_APP_BASE_API=
VUE_APP_BASE_PATH=

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions