当前位置: 首页 > news >正文

基于webpack 的 vue 多页架构

使用vue构建单页应用已经是稀松平常的事情了,但是当你遇到类似活动类需求时,每个活动相对独立,当活动达到30各以上时,长时间的构建过程会拖慢整个开发周期,而且也是不必要的。因此多页架构应运而生。

脚手架

github地址:git@github.com:lihongbin100/any-page-demo.git

目录结构

page下包含多个目录,每个目录对应一个项目,都要包含main.js入口文件和app.vue主组件。

配置说明

多页架构最重要的就是webpack的多target配置,webpack的配置可以接收一个配置数组,从而一次性对多个项目分别打包。
  • 但是如何配置需要打包哪个项目呢?
package.json文件里有pages参数,该参数可以配置page目录下的任意一个或者多个项目,配置了哪个项目,就会打包哪个项目,注意项目名称要跟目录名相同,这样不论是上线,还是本地开发,都不需要整个项目部署,而是用到哪个就打包哪个。
{
  "name": "any-page-demo",
  "version": "1.0.0",
  "description": "多页面架构demo",
  "main": "app.js",
  "pages": "page1,page2",
  "scripts": {
    "update": "npm --registry=https://registry.npm.taobao.org install -E --unsafe-perm",
    "init": "npm --registry=https://registry.npm.taobao.org install -E --unsafe-perm",
    "release": "npm run clean && webpack --env=prod",
    "test": "rm -rf ./dist && webpack --env=test",
    "dev": "export NODE_ENV=development && node app.js",
    "clean": "rm -rf ./output",
    "lint": "eslint --fix 'src/**/*.vue' 'src/**/*.js'"
  },
  "pre-commit": [
    "lint"
  ],
  ------省略
}
  • 打包的核心在于webpack.config.js中配置。最重要的就是下面生成webpack的配置数组。
process.env.npm_package_pages.split(",").forEach(
    (page) => {
      configs.push(merge(common(page), currentConfig(page)))
    }
  )

webpack.config.js

const merge = require('webpack-merge')
const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
var common = (page) => {
  return {
    entry: {
      vendor: [
        'vue',
        'cookies-js',
        'form-urlencoded',
      ],
      main: `src/page/${page}/main.js`
    },
    -------省略
}

module.exports = function (env) {
  let currentConfig = {}
  if (env == "dev") {
    currentConfig = devConfig
  }
  if (env == "test") {
    currentConfig = testConfig
  }
  if (env == "prod") {
    currentConfig = propConfig
  }
  const configs = [] //重点在这
  process.env.npm_package_pages.split(",").forEach(
    (page) => {
      configs.push(merge(common(page), currentConfig(page)))
    }
  )
  return configs
}

相关文章:

  • 弹性计算双周刊 第7期
  • SpringBoot Mybatis 分页插件PageHelper
  • 用北哥三个火枪手(yii2+houjs+yii2-wx)实现微信礼物打赏功能 --- 上部
  • 创建字符串的方法
  • Unity 灯光探针用法教程
  • 深度学习入门和学习书籍
  • Python总纲路线
  • MySQL 支持的数据类型
  • 展晓凯:“零经验”的我与唱吧从零到四亿
  • Yaml文件语法及读写小结
  • Zabbix 深度实践
  • Mysql常用命令行大全
  • bootstrap-table教程演示
  • 解析私有云服务器给企业带来的六大优势
  • 手机验证码登录
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Git 使用集
  • If…else
  • javascript从右向左截取指定位数字符的3种方法
  • JavaScript对象详解
  • leetcode386. Lexicographical Numbers
  • Lsb图片隐写
  • mac修复ab及siege安装
  • MySQL主从复制读写分离及奇怪的问题
  • Python爬虫--- 1.3 BS4库的解析器
  • session共享问题解决方案
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 后端_ThinkPHP5
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 离散点最小(凸)包围边界查找
  • 通过git安装npm私有模块
  • 在Unity中实现一个简单的消息管理器
  • 如何在招聘中考核.NET架构师
  • #Linux(帮助手册)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #NOIP 2014# day.1 T2 联合权值
  • #QT项目实战(天气预报)
  • ${ }的特别功能
  • (23)Linux的软硬连接
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (理论篇)httpmoudle和httphandler一览
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)关于多人操作数据的处理策略
  • .net core Swagger 过滤部分Api
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net 微服务 服务保护 自动重试 Polly
  • .Net 知识杂记
  • .net对接阿里云CSB服务
  • .NET基础篇——反射的奥妙
  • .net快速开发框架源码分享