美文网首页JAVASCRIPTVueWeex开发技巧
基于配置的vue多页应用开发

基于配置的vue多页应用开发

作者: advsets | 来源:发表于2017-01-02 17:03 被阅读1835次

vue是目前灰常火的前端框架,但是我们在开发pc的web端时经常需要用到多页系统,而不是简单的单页系统,而vue-cli(最好用的脚手架)只有单页应用的的脚手架,那么我们如何配置一个自己能用的vue多页应用的脚手架呢?

先上图

vue的项目结构 vue编译打包后的项目结构图 访问期望图

DIY开始

1.vue-cli 初始化一个项目

Paste_Image.png

2.改造 config/index.js

module.exports = {
  build: {...},
  dev: {...},
  // 添加下面两项,根据自己要求配置
  pageEntry: './src/views/**/*.js' // 多页应用入口
  // pageEntry: './src/main.js' // 单页应用入口
}

3.改造 build/utils.js

安装 npm install --save-dev glob

var glob = require('glob') // 引入glob包

// 在exports挂上俩个方法
// 获取路口方法
exports.getEntries = function () {  
  if (!/\*/.test(config.pageEntry)) {    
    // 单页入口处理    
    return {'index': config.pageEntry}  
  } else {    
    // 多页入口处理    
    var files = glob.sync(config.pageEntry)    
    var entries = {}    
    files.forEach(function (filepath) {      
      // 取倒数第二层(view下面的文件夹)做包名     
      var split = filepath.split('/')      
      var name = split[split.length - 2]      
      entries[name] = filepath    
    })    
    return entries  
  }
}

// connect-history-api-fallback 路由重写使用,
// https://github.com/bripkens/connect-history-api-fallback
exports.getRewrites = function () {
  var entries = exports.getEntries()
  var rewrites = []

  Object.keys(entries).forEach(function (name) {
    var reg = new RegExp('^\/' + name + '$')
    rewrites.push({from: reg, to: '\/' + name + '.html'})
  })

  return rewrites
}

4.改造 build/webpack.base.conf.js

...
module.exports = {
  entry: utils.getEntries()
}
...

4.改造 build/webpack.dev.conf.js

...
module.exports = {
  ...
  plugins: [
    ...
    // https://github.com/ampedandwired/html-webpack-plugin
    /* 注释或者删除下面插件
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'index.html',
      inject: true
    }), */
    ...
  ]
}
...

// 添加下面的处理
var entries = utils.getEntries()
Object.keys(entries).forEach(function (name) {
  // 每个页面生成一个html
  console.log(entries[name])
  var plugin = new HtmlWebpackPlugin({
    // 输出为 模块名称+html
    filename: name + '.html',
    //(模板放置对应的目录中,若用通用模板,则写 ‘index.html’)
    template: entries[name].slice(0, -3) + '.html', 
    inject: true
  });
  module.exports.plugins.push(plugin)
})

5.改造 build/dev-server.js

// 引入utils包
var utils = require('./utils')
...
// 修改history,参数,使访问的效果如预期访问效果
// 访问xxxx/login.html -> xxxx/login
app.use(require('connect-history-api-fallback')(
  {rewrites: utils.getRewrites()}
))
...

以上是将dev开发模式改造完成

6.改造 build/webpack.prod.conf.js

...
var webpackConfig = merge(baseWebpackConfig, {
  ...
  /* 注释或者删除下面插件
  new HtmlWebpackPlugin({
    filename: config.build.index,
    template: 'index.html',
    inject: true,
    minify: {
      removeComments: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true
    },
    chunksSortMode: 'dependency'
  }),*/
  ...
})

// 添加下面的处理
var entries = utils.getEntries()
Object.keys(entries).forEach(function (name) {
  // 每个页面生成一个html
  var plugin = new HtmlWebpackPlugin({
    filename: name + '.html',
    template: entries[name].slice(0, -3) + '.html',
    inject: true,
    minify: {
      removeComments: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true
    },
    chunksSortMode: 'dependency',
    // 每个包引入自己的依赖,公共依赖
    chunks: ['manifest', 'vendor', name],
    hash: true
  });

  webpackConfig.plugins.push(plugin)
})

好了改造完成,小伙伴们愉快的去玩耍吧
目前没有放到github中,有需要的联系楼主,楼主在处理

相关文章

  • vue多页应用

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

  • webpack4 构建vue多页工程

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

  • 基于配置的vue多页应用开发

    vue是目前灰常火的前端框架,但是我们在开发pc的web端时经常需要用到多页系统,而不是简单的单页系统,而vue-...

  • Nuxt项目搭建到Nuxt项目部署

    a.为什么? Vue.js原来是开发SPA(单页应用)的,但很多人想用Vue开发多页应用(有利于SEO操作),并在...

  • vue多页应用配置

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

  • 使用 Vue 开发单页应用全攻略

    使用 Vue 开发单页应用全攻略 网上面有很多关于如何使用 Vue 开发单页应用的教程,从 Vue-cli 的使用...

  • Vue2.0—仿知乎日报总结

    Vue-News 一个基于vue全家桶开发的仿知乎日报单页应用 项目github地址:项目源码 项目在线地址:在线...

  • Vue.js 搭建多页应用

    Vue.js 搭建多页应用 参考vue2.0之多页面的开发 创建项目 仿照index.html,App.vue,m...

  • 前端vue-cli4.0多页架构说明

    前端vue-cli4.0多页架构说明 [[toc]] 一、目录说明 二、骨架要点 1,mian.js配置 应用的主...

  • 第一章 React 介绍

    本章内容 多页应用开发模式的缺点 单页应用开发模式的优点 单页应用开发模式的主要问题 React 如何解决单页应用...

网友评论

  • Kathy丶Andy:能配置一个html模板吗,每次都还要建一个xxxx.html 好麻烦啊
    advsets:本文 使用 vue-cli#2.x,
    如使用@vue/cli#3.x请前往 [VUE多页应用升级--TO(@vue/cli#3.x)](https://www.jianshu.com/p/c626f5ac60e3)
  • Mr隐士:楼主这个项目的vue-cli是哪个版本的呀?
    advsets:本文 使用 vue-cli#2.x,
    如使用@vue/cli#3.x请前往 [VUE多页应用升级--TO(@vue/cli#3.x)](https://www.jianshu.com/p/c626f5ac60e3)
    advsets:文章写与17年1月, 那时候vue-cli为2.x,
    3.x未研究
  • MrMei_:楼主有没有demo
    advsets:本文 使用 vue-cli#2.x,
    如使用@vue/cli#3.x请前往 [VUE多页应用升级--TO(@vue/cli#3.x)](https://www.jianshu.com/p/c626f5ac60e3)
  • 并非如此:npm run dev的时候,每个页面都会加载所有的js,login.js和index.js同事存在,这个问题怎么解决?
    advsets:本文 使用 vue-cli#2.x,
    如使用@vue/cli#3.x请前往 [VUE多页应用升级--TO(@vue/cli#3.x)](https://www.jianshu.com/p/c626f5ac60e3)
  • fcf8c92ad0cf:额,目前是10月30日。按照上述配置vue-cli的webpack模板,在第四部的时候必须指定html加载的chunk。
    advsets:本文 使用 vue-cli#2.x,
    如使用@vue/cli#3.x请前往 [VUE多页应用升级--TO(@vue/cli#3.x)](https://www.jianshu.com/p/c626f5ac60e3)
    advsets:比较早写的,现在webpack版本有跃进,谢谢你的建议
  • fcf8c92ad0cf:太棒了,是我需要的
    advsets:本文 使用 vue-cli#2.x,
    如使用@vue/cli#3.x请前往 [VUE多页应用升级--TO(@vue/cli#3.x)](https://www.jianshu.com/p/c626f5ac60e3)
  • 7ba9afaad14b: hi 试了你的配置但是现在npm run dev报错 并且米有日志记录 vue2.0版本
    advsets:2.0的吗,好的
  • 800ef7a3b933:来个DEMO 可以试试:grin:
    advsets:@Alwaysonli_59b1 等我手头上东西做完
  • 萝BAIBAI:给个demo
    advsets:谢谢
    advsets:@Virezox 最近没空整理
  • ab24a5e4b074:什么编辑器,还不错
    advsets:Westrom
  • 我一见你就追:学习了
    advsets:本文 使用 vue-cli#2.x,
    如使用@vue/cli#3.x请前往 [VUE多页应用升级--TO(@vue/cli#3.x)](https://www.jianshu.com/p/c626f5ac60e3)

本文标题:基于配置的vue多页应用开发

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