Vue大型项目之分模块运行/打包

2023-11-12

最近写的小项目比较多,而且都是差不太多的,每个项目创建个工程,多少有点不好维护,所以决定把他们放在一个项目下,以vue-cli3+为例,实现多系统集成下的分模块打包。分模块打包方式多种多样,可以适用于多系统之间互不干扰,主系统可集成各子系统,各子系统又可单独运行的业务场景。

一、创建projects目录

分模块打包,那么各个模块内就必须得有自己独立的入口文件,路由文件。按照这种构想,需要在一个新的脚手架src目录下新建了一个projects目录:
在这里插入图片描述
如上图,可以看到Bproject、mcHd两个项目。可以在每个小项目中创建assets(包括img和css)、common(放公共组件或者方法)、views(放页面)的文件夹和mApp.vue、main.js、router.js、store.js(小项目中的路由之类)如果还需要文件夹专门用来放组件可以建一个components文件夹。(本项目比较小暂时不需要)
在这里插入图片描述

视图目录结构大概就是上面的样子,我们可以打包这个mcHd模块这个小项目下的页面,就像打包一个完整vue的项目一样。

二、更改vue.config.js文件

在项目最外层建立config文件夹,在其中新建projectsConfig.js写入:

const config = {
  mcHd: {
    pages: {
      index: {
        entry: "src/projects/mcHd/main.js",
        template: "public/index.html",
        filename: "index.html"
      }
    },
    devServer: {
      port: 8080, // 端口号
      host: "0.0.0.0",
      https: false, // https:{type:Boolean}
      open: false, //配置自动启动浏览器
      disableHostCheck: true,
      // 设置代理
      proxy: {
        "/": {
          target: "根据自己情况填写,
          changeOrigin: true,
          ws: false
        }
      }
    }
  },
  projectB: {
    pages: {
      index: {
        entry: "src/projects/Bproject/main.js",
        template: "public/index.html",
        filename: "index.html"
      }
    },
    devServer: {
      port: 8080, // 端口号
      host: '0.0.0.0',
      https: false, // https:{type:Boolean}
      open: false, //配置自动启动浏览器
      disableHostCheck: true,
      // 设置代理
      proxy: {
        "/": {
          target: "根据自己情况填写",
          changeOrigin: true,
          ws: false
        }
      }
    }
  },
};
module.exports = config;

然后在vue.config.js中代码如下

const config = require("./config/projectsConfig.js");
let projectName = process.env.PROJECT_NAME;

module.exports = {
  ...config[projectName],
  // pages: conf.pages,

  // 基本路径
  // baseUrl: './',//vue-cli3.3以下版本使用
  publicPath: "./", // vue-cli3.3+新版本使用

  // 输出文件目录
  outputDir: "dist/" + projectName + "/"
};

三、打包单个模块

在本项目中的package.json文件,有项目启动,打包的命令。可以在这配置每个项目的启动,打包命令
正常单个项目的文件是这样子的
在这里插入图片描述
那我们需要需要做的就是不同项目有不同的serve、build
这里需要用到cross-env这个模块

下载插件命令:npm install --save-dev cross-env

当我们执行打包命令的时候,通过cross-env去找到我们的入口文件,然后再进行打包。

所以我们可以模仿环境变量的写法,就可以设置每个项目的打包命令了。
代码如下

 "scripts": {
    "serve:mcHd": "cross-env PROJECT_NAME=mcHd vue-cli-service serve",
    "serve:projectB": "cross-env PROJECT_NAME=projectB vue-cli-service serve",
    "build:mcHd": "cross-env PROJECT_NAME=mcHd vue-cli-service build",
    "build:projectB": "cross-env PROJECT_NAME=projectB vue-cli-service build",
    "uat": "vue-cli-service build --mode uat",
    "pro": "vue-cli-service build --mode pro",
    "lint": "vue-cli-service lint"
  },

这样 每次想要启动哪个项目就可以输入哪个项目的命令啦
列如:npm run serve:mcHd
这样就实现了上图mcHd这个文件的页面的单独启动,也就实现了分模块打包。
下面贴一个mcHd页面文件的内容,可做参考
在App.vue中配置如下代码:

<template>
  <div id="app">
    <router-view />
  </div>
</template>

<style lang="scss"></style>

在main.js中配置如下代码:
下面的scss是一个公共文件样式 具体根据自己来定

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import "./assets/css/reset.scss";

Vue.config.productionTip = false;

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount("#app");

在router.js中配置如下代码

import Vue from "vue";
import Router from "vue-router";
import Home from "./views/Home.vue";

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: "/",
      name: "home",
      component: Home
    }
  ]
});

store.js 我这里没用到 为空

home.vue页面

<template>
  <div>
    11111
  </div>
</template>

<script>
export default {};
</script>

<style></style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue大型项目之分模块运行/打包 的相关文章

  • 渲染货币和符号并与来自不同单元格的数据相结合

    我正在使用最新的 jQuery DataTables v1 10 7 我正在尝试将数字解析为以下格式 239 90 USD 我可以使用此命令使货币正常工作 columns data Price render fn dataTable ren
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • vector的find用法

    一 find函数存在于算法中 其头文件为 include
  • 驱动 - platform总线驱动

    include
  • 怎么求解100个正整数的最大公约数python

    答 你可以使用Python中的fractions模块来求解100个正整数的最大公约数 你需要先导入它 import fractions 然后你可以使用fractions gcd函数来求解 fractions gcd 100 200
  • Codeforces#808(Div.2)A-D题解

    目录 A Difference Operations B Difference of GCDs C Doremy s IQ D Difference Array A Difference Operations Problem A Codef
  • 2019年7款3D扫描仪APP(Android和iOS),让你手机秒变3D扫描仪!

    在我之前的一篇文章 教程 SolidWorks与3D扫描技术不得不说的故事 中 提到了SolidWorks和3D扫描技术之间的完美合作 今天就继续围绕3D扫描话题 为大家分享7款2019年3D扫描仪APP Android和iOS 喜欢就继续
  • Linux 解决sudo后接命令,仍旧权限不足的问题

    将本想执行的 sudo echo aa gt gt root text txt 改为 sudo sh c echo aa gt gt root text txt
  • Docker 1.9的新网络特性,以及Overlay详解

    本文转载自灵雀云技术博客 原文链接 http www alauda cn 2016 01 18 docker 1 9 network 作者简介 林帆 ThoughtWorks公司软件工程师及DevOps咨询师 具有丰富的持续交付和服务器运维
  • CCF 2104年3月第一题--相反数(java)

    代码如下 package com hsx ccf import java util Scanner public class Ccf20140301 public static void main String args SuppressW
  • Spring Cloud中的Hystrix的实现和使用

    Spring Cloud Hystrix 是 Spring Cloud 生态系统中的一个断路器组件 它可以帮助开发者优雅地处理分布式系统中的故障 提高系统的容错能力 下面介绍 Spring Cloud Hystrix 的实现和使用 引入依赖
  • QT获取lineEdit内容并写入文件中

    在ui中创建一个lineEdit 然后 QString sss ui gt lineEdit gt text 这样就获得了lineEdit的内容 并转为了QString格式 接下来参考 https editor csdn net md ar
  • 残差网络模型

    1 原始残差网络 最基本的残差块 中间的两层神经网络学习输入输出之间的残差 而旁边的链接就像一个高速公路 使得反向传播算法中的残差能通过这条路传到前边去 当网络变深时可以使得中间的输出为0 那么网络就能自适应的变成一个浅一点的网络 左边ba
  • Java 根据EXCEL下标获取EXCEL的列名

    通过根据EXCEL下标获取EXCEL的列名 用于给单元格设置公式用 num 是以0开头的下标 public static String getExcelColumn Integer num if num null return null S
  • 树的概念:层次、高度、深度、宽度

    目录 层次 宽度 深度 高度 其中只有层次是树原生的概念 其他都是从树中的结点来的 层次 从根节点开始算起 根节点算第一层 如图所示的树 第1层 A 第2层 B C 第3层 D E F 第4层 G H I 宽度 其实就是度 把结点的子树的棵
  • 大并发下请求合并(并发处理技巧)

    大并发下请求合并 一次请求消耗的资源 旧的方式 改造后 批量请求处理器 批量请求包装类 使用 性能测试 旧的 改造后的 一次请求消耗的资源 我们经常碰到查询请求的操作 例如根据用户id查询该用户的信息 接口仓储层查询用户正常的做法是通过id
  • adam算法介绍和总结

    19 adam算法 Adam 是一种可以替代传统随机梯度下降 SGD 过程的一阶优化算法 它能基于训练数据迭代地更新神经网络权重 Adam 最开始是由 OpenAI 的 Diederik Kingma 和多伦多大学的 Jimmy Ba 在提
  • ubuntu18.04编译Openwrt出现的问题解决

    ubuntu18 04编译Openwrt出现的问题解决 问题1 Build dependency Please install Git git core gt 1 6 5 问题2 gdate c 2497 7 error format no
  • 微信小程序授权打开摄像头,授权相册保存图片

    1 授权打开摄像头 doTakePhoto let that this wx getSetting success res 第一次未授权 if res authSetting scope camera undefined wx author
  • vscode中配置代码片段

    步骤如下 设置 gt 用户代码片段 新增全局代码片段 起全局代码片段文件名 xxx code snippets 这里以配置vue2初始代码片段为例 配置具体代码片段 按enter进入文件配置 以下是vue2的代码片段示例 具体可以自己随意配
  • 若依缓存使用浅析

    配置 这块主要涉及两个类 FastJson2JsonRedisSerializer 继承 RedisSerializer 接口自定义使用 fastjson 进行序列化和反序列化 RedisConfig 配置使用 StringRedisSer
  • Vue大型项目之分模块运行/打包

    最近写的小项目比较多 而且都是差不太多的 每个项目创建个工程 多少有点不好维护 所以决定把他们放在一个项目下 以vue cli3 为例 实现多系统集成下的分模块打包 分模块打包方式多种多样 可以适用于多系统之间互不干扰 主系统可集成各子系统