首页 > 其他分享 >Vue3也能用上Vue2写的组件

Vue3也能用上Vue2写的组件

时间:2024-10-16 17:52:57浏览次数:9  
标签:vue process loader webpack Vue2 Vue3 组件 js

文章目录

         文章目录

概要

整体架构流程

参考博客

实现效果图

技术细节

小结


概要

需求:开发一个问题反馈组件,要求企微连线负责人、跳转页面反馈问题...组件可以安装在Vue2、Vue3、React等项目里

整体架构流程

  • 创建webpack-simple项目,编写组件,部署并发布npm包
  • 创建Vue2项目,安装此依赖,利用微前端 (无界) ,嵌套Vue3项项目 (本文以Vue3为例,React不做演示!!!)

参考博客

实现效果图

技术细节

  • 因为写的组件需要跳转出去打开新的页面,所以写的项目不单是发布一个npm包,还需要部署在服务器上,这就要改一下webpack.config.js的配置

  • webpack-simple项目打包后图片资源不显示问题,安装 url-loader 依赖

  • webpack-simple项目打包后资源找不到,修改html文件引入资源的路径 (JhLink.js是我打包后的文件的名字)

  • 因为组件是Vue2的版本,所以我建了Vue2的项目,安装此依赖,利用微前端(无界),嵌套了Vue3项目

  • 组件监听Vue3项目里的参数来控制组件是否隐藏

代码

组件里的webpack.config.js

var path = require('path')
var webpack = require('webpack')
const NODE_ENV = process.env.NODE_ENV
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
  entry: ["./src/main.js", './index.js'],
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/'+getUrl(),
    filename: 'JhLink.js',
    library: 'JhLink',
    libraryTarget: 'umd',
    umdNamedDefine: true
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          'css-loader'
        ],
      },
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
          }
          // other vue-loader options go here
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'url-loader',
        options: {
          esModule: false,
          name: '[name].[ext]?[hash]'
        }
      }
    ]
  },
  plugins:[
    new HtmlWebpackPlugin({
      template:"./index.html",//告诉模板的位置
      filename:"index.html"
    })
  ],
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js'
    },
    extensions: ['*', '.js', '.vue', '.json']
  },
  devServer: {
    // port: 8000,
    host:'192.168.43.92',
    historyApiFallback: true,
    noInfo: true,
    overlay: true
  },
  performance: {
    hints: false
  },
  devtool: '#eval-source-map'
}
if (process.env.NODE_ENV === 'production') {
  module.exports.devtool = '#source-map'
  // http://vue-loader.vuejs.org/en/workflow/production.html
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      // 'process.env': {
      //   NODE_ENV: '"production"'
      // }
      'process.env': require('./src/config/prod')
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ])
}else if (process.env.NODE_ENV === 'development') {
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': require('./src/config/dev')
    }),
  ])
}else if (process.env.NODE_ENV === 'test') {
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': require('./src/config/test')
    }),
  ])
}

function getUrl() {
  let info = {}
  if (NODE_ENV === 'production') {
    info = require('./src/config/prod')
  }else if (process.env.NODE_ENV === 'development') {
    info = require('./src/config/dev')
  }else if (process.env.NODE_ENV === 'test') {
    info = require('./src/config/test')
  }
  return info.VUE_APP_URL.substring(1, info.VUE_APP_URL.length - 1);
}

小结

        一开始想优雅开发 vue2/3 通用组件的,查看了关于 vue-demi-component-template 这个库,但是吧,这个只能写一些简单的js,一些复杂需要引入组件的,尤其组件还分Vue2和Vue3版本的,感觉就不合适了,然后就看了微前端!!!

标签:vue,process,loader,webpack,Vue2,Vue3,组件,js
From: https://blog.csdn.net/qq_44828539/article/details/142982972

相关文章

  • 如何在鸿蒙 NEXT 中使用 @Builder 装饰器优化 UI 组件的复用?
    在开发鸿蒙NEXT应用时,咱们需要经常创建自定义组件,由于自定义组件内部UI结构固定,仅与使用方进行数据传递,因此,ArkUI还提供了一种更轻量的UI元素复用机制@Builder。大家好,我是V哥,在鸿蒙NEXT开发中,@Builder装饰器是一种轻量级的UI元素复用机制,它允许开发者将重复使用......
  • vue3简单使用threejs立方缓冲几何体(BoxGeometry)
    文章目录前言一、安装three二、使用步骤1.导入three、建立场景、相机和渲染器2.添加立方体3.渲染循环三、其他1.轨道控制器OrbitControls和坐标轴辅助对象AxesHelper2.GUI创建可交互的控件(点击全屏+退出全屏)3.监听窗口的变化执行一些重置操作四、完整代码五、效......
  • Vue 3中集成Element Plus组件库
    文章目录一、ElementPlus简介二、安装ElementPlus2.1安装ElementPlus2.2引入ElementPlus三、使用ElementPlus组件3.1创建组件3.2组件引入四、总结随着前端开发的快速发展,组件库已经成为开发实践中不可或缺的部分。Vue3作为一个现代的J......
  • 界面组件DevExpress WPF v24.1亮点 - 支持全新的字体图标图像
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpressWPF控件日前正式发布了今年一个重大版......
  • 1.5K+ Star!assistant-ui:一套构建AI聊天界面的组件库
    assistant-ui简介assistant-ui[1]是一套用于构建AI聊天界面的React组件库。它集成了多种模型提供商,如OpenAI、Anthropic、AWS、Google等,并支持自定义API集成。它旨在简化AI聊天界面的开发过程,使开发者能够快速构建出功能丰富的聊天应用。项目特点主要特点模型提供商支......
  • vue3使用pinia仓库解构赋值响应式丢失的解决方式
    代码storeimport{defineStore}from"pinia";import{ref}from"vue";exportconstuseMyTestStore=defineStore('mytestStore',()=>{//stateconstcount=ref(0);constcount2=ref(1);constincrement2......
  • 10/15AWT组件学习(1)
    AWT组件学习(1)监听器常用组件布局publicstaticvoidmain(String[]args){Frameframe=newFrame();//Frame是窗体,我们只需要创建这样一个对象就可以了,这样就会直接创建一个新的窗口frame.setSize(500,300);//可以使用setSize方法设定窗体大小frame.setVisible(t......
  • Vue3 + Openlayers10示例 台风轨迹和台风圈
    前言假装已经完成了vue3和Openlayers10开发环境的搭建,如果有需要,可搜索vue+Openlayers环境搭建的相关文章。本示例基于Vue3和Openlayers10的环境,实现台风轨迹和台风圈的效果。一、安装插件安装Element-plus插件,其实只在台风列表的地方用到了el-checkbox,可根据实际需......
  • 图形用户界面-GUI的基本概念和组件之一
    前言        GUI(GraphicalUserInterface,图形用户界面,简称图形界面)编程实际是引用java.awt或javax.swing类包中的窗口类、控制组件类、布局类、事件类等,通过将控制组件类,如菜单、按钮、文本框等,直接或间接添加到窗口中,通过鼠标即可进行操作的图形化界面设计方法。ja......
  • vue3+h5+echarts引入折线图
     实现效果:1.引入echarts,在终端输入命令npminstallecharts--save2.安装成功后直接复制以下代码即可<template><divref="chartDom"class="echart"id="main"></div></template><scriptsetup>import{onMounted,......