VUE 多页面模式配置(多入口)

vue-cli 基于 v4.0.5

vue.config.js

vue-cli 在升级至V4版本后,项目结构有了部分变化,取消了原有的webpack配置的build文件夹,相关配置转移至根目录下vue.config.js文件,vue.config.js文件创建项目时不自动创建,需手动添加
let path = require('path')
let glob = require('glob') // 用于筛选文件

// 根据路径生成入口pages对象
function handleEntry(entry) {
  let entries = {}
  let entryBaseName = ''
  let entryPathName = ''
  let entryTemplate = ''

  glob.sync(entry).forEach(item => {
    entryBaseName = path.basename(item, path.extname(item))
    entryTemplate = item.split('/').splice(-3)
    entryPathName = entryBaseName 

    entries[entryPathName] = {
      entry: entryTemplate[0] +
        '/' +
        entryTemplate[1] +
        '/' +
        entryTemplate[1] +
        '.js',
      template: entryTemplate[0] + '/' + entryTemplate[1] + '/' + entryTemplate[2], 
      title: entryTemplate[2], // 打包后的标题
      filename: entryTemplate[1] +
      '.ejs', // 打包后的文件名
    }
  })
  return entries
}

function resolve(dir) {
  return path.join(__dirname, dir)
}

const pages = handleEntry('./page/**?/*.html')
console.log(pages)

// 以下开始配置
module.exports = {
  lintOnSave: false,
  publicPath: process.env.NODE_ENV === 'production' ? '/' : '/',
  productionSourceMap: false,
  // 入口设置
  pages,
  devServer: {
    index: '/', // 运行时,默认打开application1页面
    // 告诉dev-server在服务器启动后打开浏览器,将其设置true为打开默认浏览器
    open: true,
    host: '0.0.0.0', // 允许非本机访问
    port: 8080,
    https: false,
    hotOnly: false,
    // 配置首页 入口链接
    before: app => {
      app.get('/', (req, res) => {
        for (let i in pages) {
          res.write(`<a target="_self" href="/``{i}">/``{i}</a></br>`)
        }
        res.end()
      })
    },
    
    // 跨域代理
    // proxy: {
    //   '/api': {
    //     target: 'http://192.168.4.145:3002',
    //     changeOrigin: true,
    //     ws: true,
    //     pathRewrite: {
    //       '^/api': 'http://192.168.4.145:3002'
    //     }
    //   }
    // }
  },
  // alias快速访问
  chainWebpack: config => {
    config.resolve.alias
      .set('@', resolve('/components'))
      .set('~', resolve('/utils'))
      .set('api', resolve('/api/index'))
      .set('img', resolve('/assets'))
  }
}

项目结构

注意事项

  • 单页面模式中不能使用vue-router,开发模式中可正常预览,但打包会造成白屏
  • vuex、bus等全局通信方式可正常使用

Subscribe to ionantha

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe