美文网首页
vue多页项目配置

vue多页项目配置

作者: 慕小牧 | 来源:发表于2018-06-19 22:32 被阅读33次

前言

​ 前阵子和app端做混合开发,而我们前端使用的技术又是vue,单页肯定不行,于是就需要使用vue进行多页开发,本来这块是我同事进行修改webpack进行配置的,后来我给记录了下来,方便以后也能使用。好了,闲话不多说,开始正题了。

webpack配置

​ 初始化项目啥都不说了,直接进入webpack修改配置的步骤。

​ 首先我们初始化完项目后进入build目录中,找到webpack.base.conf.js。因为vue是单页项目,所以我们能发现入口只有一个main.js文件:

module.exports = {
  ...
  entry: {
    app: './src/main.js'
  },
  ...
}

我们要多页,那么肯定是需要多个入口的。所以等会这块配置需要做修改。

其次,我们打开webpack.prod.conf.js文件,这个文件是打包的配置的js文件,我们找到如下代码:

new HtmlWebpackPlugin({
  filename: config.build.index,
  template: 'index.html',
  inject: true,
  minify: {
    removeComments: true,
    collapseWhitespace: true,
    removeAttributeQuotes: true
    // more options:
    // https://github.com/kangax/html-minifier#options-quick-reference
  },
  // necessary to consistently work with multiple chunks via CommonsChunkPlugin
  chunksSortMode: 'dependency'
})

这块代码主要是将单页打包成正式项目,因为针对多页的打包,我们待会这里也需要做修改。

多页配置一 — pages.json

​ 要配置多页,我们这边的做法是配置一个页面数据json,比如pages.json:

{
  "page1": {
    "path": "./src/views/page1/index.js",
    "title": "页面一"
  },
  "page2": {
    "path": "./src/views/page2/index.js",
    "title": "页面二"
  },
  "page3": {
    "path": "./src/views/page3/index.js",
    "title": "页面三"
  }
}

path -> 页面主入口

title -> 对应页面的title

根据path我们创建对应的文件目录,如下图:

页面目录

page1为例:

<!-- page1.vue -->
<template>
  <div>
    i am page1
  </div>
</template>
// index.js
import Vue from 'vue'
import Page1 from './page1'

/* eslint-disable no-new */
new Vue({
  el: '#app',
  render: h => h(Page1)
})

其实就相当于把views下的每个文件夹都当做一个单页项目来开发即可。

多页配置二 — webpack

​ 上文我们说到要修改webpack.base.conf.js中的入口文件,但这么做的前提是,我们需要先通过pages.json获取到页面列表。我们将这一步操作放到build->utils.js中:

// utils.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
function getEntry () {
  return Object.entries(require('../pages.json')).map(([key, value]) => {
    return Object.assign({ key }, value)
  })
}

exports.getEntry = getEntry

// 通过循环 多页编译
exports.generateHTML = () => {
  return getEntry().map((page) => {
    return new HtmlWebpackPlugin({
      title: page.title || '',
      filename: `${page.key}.html`,
      template: page.template || 'index.html',
      inject: true,
      chunks: ['vendor', page.key],
      chunksSortMode: 'manual'
    })
  })
}
// PS:如果需要使用别的模板 可以在pages.json中页面对象中多配置一个template属性 值为模板地址,比如
//{
//    "page4": {
//        "path": "./src/views/page4/index.js",
//        "title": "页面四",
//        "template": "./src/template/template1.html"
//    }
//}

然后我们打开webpack.base.conf.js

// webpack.base.conf.js
module.exports = {
  ...
  entry: utils.getEntry().reduce(function (o, v) {
    o[v.key] = v.path
    return o
  }, {}),
  ...
}

然后我们再配置webpack.dev.conf.js,这样我们可以直接通过localhost进行页面访问并调试:

// webpack.dev.conf.js
// 注释掉这一句
// new HtmlWebpackPlugin({
//   filename: 'index.html',
//   template: 'index.html',
//   inject: true
// }),

// 加上这一句
...utils.generateHTML(),

这样配置完后,使用yarn dev运行项目,即可通过localhost:8080/page1.html访问到对应页面的内容了。

切记,这样通过localhost访问的页面要加上.html才能正确访问

最后一步,打包的配置:

// webpack.prod.conf.js
// 在webpackConfig的plugin中注释掉以下内容
// new HtmlWebpackPlugin({
//   filename: config.build.index,
//   template: 'index.html',
//   inject: true,
//   minify: {
//     removeComments: true,
//     collapseWhitespace: true,
//     removeAttributeQuotes: true
//     // more options:
//     // https://github.com/kangax/html-minifier#options-quick-reference
//   },
//   // necessary to consistently work with multiple chunks via CommonsChunkPlugin
//   chunksSortMode: 'dependency'
// }),

// 以下是打包共用模块的内容,多页中用不少 也可注释
// new webpack.optimize.CommonsChunkPlugin({
//   name: 'manifest',
//   minChunks: Infinity
// }),
// This instance extracts shared chunks from code splitted chunks and bundles them
// in a separate chunk, similar to the vendor chunk
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
// new webpack.optimize.CommonsChunkPlugin({
//   name: 'app',
//   async: 'vendor-async',
//   children: true,
//   minChunks: 3
// }),

// 然后加上以下代码
...utils.generateHTML(),

这样我们就大功告成了~

然后我们使用yarn build来看看打包的情况:

打包后的文件目录

这样,我们的多页就配置成功了哦~ 好嘞 大功告成!

如果打开页面是空白,可千万别忘了去config->index.js中查看下,是否将assetsPublicPath中的/配置成了./

相关文章

  • vue多页项目配置

    前言 ​ 前阵子和app端做混合开发,而我们前端使用的技术又是vue,单页肯定不行,于是就需要使用vue进行多页开...

  • vue多页应用

    vue如何将单页面改造成多页面应用 vue单页多页的开发环境配置+vue的开发思路

  • electron-vue多页面配置

    前言 Electron-vue使用的单页面配置,由于项目中不可避免存在多个窗口,需要配置多个html地址,使用多页...

  • vue多页配置

    人生就像一列开往坟墓的列车,路途上会有很多站,很难有人至始至终陪你走完全程,当陪你的人要下车时,即便不舍,也要心存...

  • webpack

    webpack入门基本配置参考:https://www.webpackjs.com/guides/vue多页配置参...

  • webpack4 构建vue多页工程

    webpack4 构建vue多页工程 多页应用开发环境配置 构建开发环境的配置,需要使用到webpack-dev-...

  • 基于 vue-cli 3.0.0 构建的多页面基础项目模板

    前言 该项目跑了下 vue-cli 3.0.0 多页面项目创建的流程,就当个以后多页项目的雏形了,新版的 vue-...

  • vue多页应用配置

    vue脚手架创建的项目都是单页面应用但是有一些场景下我们需要使用多页面应用(比如一个系统的后端和前端要分为不同的页...

  • vue3+element-plus配置cdn

    1,项目配置 最近在做一个项目,项目配置版本如下: vue:3.2.6 vue-router:4.0.11 vue...

  • nginx结合vue+node简单配置

    根目录部署vue打包dist vue项目打包为dist,默认访问服务器绑定的域名,需要配置80端口,配置位置多默认...

网友评论

      本文标题:vue多页项目配置

      本文链接:https://www.haomeiwen.com/subject/urwzeftx.html