Skip to content
/ vue-multiple-pages Public template

多页面vue项目,支持打包后每个页面也单独文件夹(具体请看README)

Notifications You must be signed in to change notification settings

BiYuqi/vue-multiple-pages

 
 

Repository files navigation

Vue Multiple Pages 👋

Vue多页面配置实例

Features

  • 打包后保持按页面输出
  • 每个页面有自己的css & js
  • 公共的js & css 在对应目录
  • 默认index页面打平构建

Mutiple Setting

const path = require('path')
const glob = require('glob')

const generateEntries = () => {
  // 默认查询多页面地址
  const PATH_ENTRY = path.resolve(__dirname, './src/pages')
  // 约定构建出的页面用folder名字,默认入口为每个页面的main.js
  const entryFilePaths = glob.sync(PATH_ENTRY + '/**/main.js')
  const entry = {}

  entryFilePaths.forEach((filePath) => {
    const FILENAME = filePath.match(/([^/]+)\/main\.js$/)[1]
    entry[FILENAME] = {
      entry: filePath,
      template: 'public/index.html',
      filename: FILENAME === 'index' ? `${FILENAME}.html` : `${FILENAME}/${FILENAME}.html`,
      // title可不传,每个页面单独设置
      title: `${FILENAME} Page`,
      chunks: ['chunk-vendors', 'chunk-common', FILENAME]
    }
  })

  return entry
}

module.exports = {
  generateEntries
}

vue.config.js

const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const { generateEntries } = require('./mutiple-entry')

const resolve = dir => path.join(__dirname, dir)
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)

module.exports = {
  publicPath: IS_PROD ? process.env.BASE_URL : '/',
  productionSourceMap: false,
  pages: generateEntries(),
  devServer: {
    open: true
  },
  chainWebpack: config => {
    // 添加别名
    config.resolve.alias
      .set('vue$', 'vue/dist/vue.esm.js')
      .set('@', resolve('src'))
      .set('@assets', resolve('src/assets'))
      .set('@buy', resolve('src/pages/buy'))
      .set('@rent', resolve('src/pages/rent'))
      .set('@index', resolve('src/pages/index'))
      .set('@common', resolve('src/components'))

    // dev环境js处理
    if (!IS_PROD) {
      config.output
        .filename(bundle => {
          return bundle.chunk.name === 'index' ? 'js/[name].js' : '[name]/[name].js'
        })
    }

    // build环境js
    if (IS_PROD) {
      config.output
        .filename(bundle => {
          return bundle.chunk.name === 'index' ? 'js/[name].[contenthash:8].js' : '[name]/[name].[contenthash:8].js'
        })
    }
  }
}

Usage

git clone https://github.com/BiYuqi/vue-multiple-pages.git

cd vue-multiple-pages

yarn install

yarn run serve

yarn run build

About

多页面vue项目,支持打包后每个页面也单独文件夹(具体请看README)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published