Vue2源码梳理:在 import Vue 时干了啥

Vue组件引入外部JS的十种方法:从import到动态加载的完整指南 在前端开发中,模块化是管理代码依赖、提升可维护性的核心概念。它通过封装和隔离,让代码结构更清晰。其原理基于不同的模块规范(如ES Module、CommonJS),构建工具(如Webpack、Vite)据此在构建时或运行时处理依赖关系。这一机制的技术价值在于实现代码拆分、按需加载和优化打包体积,从而提升应用性能。常见的应用场景包括集成第三方库(如地图服务、图表工具)、加载业务工具函数,以及实现路由懒加载。本文聚焦于Vue.js框架,针对开发中频繁遇到的“动态js文件要怎么本地替换”和“import标红但库已 阅读详情

分析导入入口

  • 在Web应用的 Vue.js 构建过程的 Runtime + Compiler 版本下,我们重点关注这个版本
  • 它的入口是 src/platforms/web/entry-runtime-with-compiler.js

1 ) entry-runtime-with-compiler.js 入口文件

  • 现在分析一下在 import Vue 的时候,都执行了哪些事情

  • entry-runtime-with-compiler.js

    /* @flow */
    
    import config from 'core/config'
    import { warn, cached } from 'core/util/index'
    import { mark, measure } from 'core/util/perf'
    
    import Vue from './runtime/index'
    import { query } from './util/index'
    import { compileToFunctions } from './compiler/index'
    import { shouldDecodeNewlines, shouldDecodeNewlinesForHref } from './util/compat'
    
    const idToTemplate = cached(id => {
      const el = query(id)
      return el && el.innerHTML
    })
    
    const mount = Vue.prototype.$mount
    Vue.prototype.$mount = function (
      el?: string | Element,
      hydrating?: boolean
    ): Component {
      el = el && query(el)
    
      /* istanbul ignore if */
      if (el === document.body || el === document.documentElement) {
        process.env.NODE_ENV !== 'production' && warn(
          `Do not mount Vue to <html> or <body> - mount to normal elements instead.`
        )
        return this
      }
    
      const options = this.$options
      // resolve template/el and convert to render function
      if (!options.render) {
        let template = options.template
        if (template) {
          if (typeof template === 'string') {
            if (template.charAt(0) === '#') {
              template = idToTemplate(template)
              /* istanbul ignore if */
              if (process.env.NODE_ENV !== 'production' && !template) {
                warn(
                  `Template element not found or is empty: ${options.template}`,
                  this
                )
              }
            }
          } else if (template.nodeType) {
            template = template.innerHTML
          } else {
            if (process.env.NODE_ENV !== 'production') {
              warn('invalid template option:' + template, this)
            }
            return this
          }
        } else if (el) {
          template = getOuterHTML(el)
        }
        if (template) {
          /* istanbul ignore if */
          if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
            mark('compile')
          }
    
          const { render, staticRenderFns } = compileToFunctions(template, {
            shouldDecodeNewlines,
            shouldDecodeNewlinesForHref,
            delimiters: options.delimiters,
            comments: options.comments
          }, this)
          options.render = render
          options.staticRenderFns = staticRenderFns
    
          /* istanbul ignore if */
          if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
            mark('compile end')
            measure(`vue ${this._name} compile`, 'compile', 'compile end')
          }
        }
      }
      return mount.call(this, el, hydrating)
    }
    
    /**
     * Get outerHTML of elements, taking care
     * of SVG elements in IE as well.
     */
    function getOuterHTML (el: Element): string {
      if (el.outerHTML) {
        return el.outerHTML
      } else {
        const container = document.createElement('div')
        container.appendChild(el.cloneNode(true))
        return container.innerHTML
      }
    }
    
    Vue.compile = compileToFunctions
    
    export default Vue
    
  • 这里可以看到 export default Vue 最终导出 Vue 对象

  • 而一开始的 Vue 的来源:import Vue from './runtime/index'

  • 之后,在其原型上挂载 $mount 方法

2 ) runtime/index 文件

  • 我们看下 runtime/index 文件中定义的Vue, 具体位置: src/platforms/web/runtime/index.js
    import Vue from 'core/index'
    import config from 'core/config'
    import { extend, noop } from 'shared/util'
    import { mountComponent } from 'core/instance/lifecycle'
    import { devtools, inBrowser, isChrome } from 'core/util/index'
    
    import {
      query,
      mustUseProp,
      isReservedTag,
      isReservedAttr,
      getTagNamespace,
      isUnknownElement
    } from 'web/util/index'
    
    import { patch } from './patch'
    import platformDirectives from './directives/index'
    import platformComponents from './components/index'
    
    // install platform specific utils
    Vue.config.mustUseProp = mustUseProp
    Vue.config.isReservedTag = isReservedTag
    Vue.config.isReservedAttr = isReservedAttr
    Vue.config.getTagNamespace = getTagNamespace
    Vue.config.isUnknownElement = isUnknownElement
    
    // install platform runtime directives & components
    extend(Vue.options.directives, platformDirectives)
    extend(Vue.options.components, platformComponents)
    
    // install platform patch function
    Vue.prototype.__patch__ = inBrowser ? patch : noop
    
    // public mount method
    Vue.prototype.$mount = function (
      el?: string | Element,
      hydrating?: boolean
    ): Component {
      el = el && inBrowser ? query(el) : undefined
      return mountComponent(this, el, hydrating)
    }
    
    // ...
    
    export default Vue
    
    • 它最终也是 export default Vue, 而这里的 Vue 是从 core/index 而来
    • import 之后,它又定义了一些全局配置,挂载在 Vue.config 之上
    • 在 Vue 原型上又挂载了 __patch__ 方法 和 $mount 方法等

3 ) core/index 文件

  • 我们再进入 core/index,具体位置: src/core/index.js
    import Vue from './instance/index'
    import { initGlobalAPI } from './global-api/index'
    import { isServerRendering } from 'core/util/env'
    import { FunctionalRenderContext } from 'core/vdom/create-functional-component'
    
    initGlobalAPI(Vue)
    
    Object.defineProperty(Vue.prototype, '$isServer', {
      get: isServerRendering
    })
    
    Object.defineProperty(Vue.prototype, '$ssrContext', {
      get () {
        /* istanbul ignore next */
        return this.$vnode && this.$vnode.ssrContext
      }
    })
    
    // expose FunctionalRenderContext for ssr runtime helper installation
    Object.defineProperty(Vue, 'FunctionalRenderContext', {
      value: FunctionalRenderContext
    })
    
    Vue.version = '__VERSION__'
    
    export default Vue
    
    • 这里的 Vue 一开始 也是从其他地方导入而来的 import Vue from './instance/index'
    • 同时,initGlobalAPI(Vue) 这里初始化了一些 全局的 API
      • 这里定义了 Vue.config, 这里是全局config
      • 这里的 config 定义对应的在vue官网上相关的API文档可供参考
      • 还定义了 Vue.util 对象,里面有对应的方法,这里没有写在公共文档上
        • 这里不建议外部使用,因为里面的方法可能不稳定
      • 同时,这里是给 Vue 这个对象本身扩展全局的静态方法
        • 定义了 Vue.set, Vue.delete, Vue.nextTick, Vue.options 方法
        • Vue.options 用于合并方法,里面引用了 ASSET_TYPES
        • 在 ASSET_TYPES 中又定义了 component, directive, filter 三个全局方法的枚举
      • 在 Vue.options 上又挂载了 _base Vue.options._base = Vue
      • extend(Vue.options.components, builtInComponents) 这里的 builtInComponents 是内置组件
        • 里面只有 keep-alive 组件
      • 之后又调用了一系列的 init 方法
        • initUse(Vue) 创建了 vue.use 的全局方法
        • initMixin(Vue) 定义了一个全局的 mixin 方法
        • initExtend(Vue) 定义了 Vue.extend 方法
        • initAssetRegisters(Vue) 定义了上面ASSET_TYPES中枚举的全局 component, directive, filter 方法
      • 经过一些列初始化,我们才能在业务代码中使用这些代码
      • 可以进入 global-api/index 文件中查看,这里不再赘述, 参考 src/core/global-api/index.js
        export function initGlobalAPI (Vue: GlobalAPI) {
          // config
          const configDef = {}
          configDef.get = () => config
          if (process.env.NODE_ENV !== 'production') {
            configDef.set = () => {
              warn(
                'Do not replace the Vue.config object, set individual fields instead.'
              )
            }
          }
          Object.defineProperty(Vue, 'config', configDef)
        
          // exposed util methods.
          // NOTE: these are not considered part of the public API - avoid relying on
          // them unless you are aware of the risk.
          Vue.util = {
            warn,
            extend,
            mergeOptions,
            defineReactive
          }
        
          Vue.set = set
          Vue.delete = del
          Vue.nextTick = nextTick
        
          Vue.options = Object.create(null)
          ASSET_TYPES.forEach(type => {
            Vue.options[type + 's'] = Object.create(null)
          })
        
          // this is used to identify the "base" constructor to extend all plain-object
          // components with in Weex's multi-instance scenarios.
          Vue.options._base = Vue
        
          extend(Vue.options.components, builtInComponents)
        
          initUse(Vue)
          initMixin(Vue)
          initExtend(Vue)
          initAssetRegisters(Vue)
        }
        

4)instance/index 文件

  • 再进入 instance/index 文件
    import { initMixin } from './init'
    import { stateMixin } from './state'
    import { renderMixin } from './render'
    import { eventsMixin } from './events'
    import { lifecycleMixin } from './lifecycle'
    import { warn } from '../util/index'
    
    function Vue (options) {
      if (process.env.NODE_ENV !== 'production' &&
        !(this instanceof Vue)
      ) {
        warn('Vue is a constructor and should be called with the `new` keyword')
      }
      this._init(options)
    }
    
    initMixin(Vue)
    stateMixin(Vue)
    eventsMixin(Vue)
    lifecycleMixin(Vue)
    renderMixin(Vue)
    
    export default Vue
    
    • 在这里,就找到了 Vue 对象真正的定义的位置
    • 最上面,进行环境的判断,并且限制了 必须通过 new 来实例化
    • 之后执行 _init() 方法
    • 之后,调用了 一系列的 Minxin 的方法
      • initMixin 源码中,在 Vue 的原型上挂了 _init 方法
      • stateMixin 源码中,也是在 Vue中挂载了一些方法,比如: $set, $delete, $watch
      • … 其他都类似
      • 也就是说,每个 Minxin 就是在原型上汇入一些方法
    • 这里通过 function 的方式来声明 Vue, 比用 Class 好处在可以方便拆分方法的挂载
      • 拆分到不同文件下的好处是,方便代码的管理,有利于代码的维护
    • 这是非常值得学习的代码重构方案

5 )总结

  • 所以,到现在我们知道 Vue 本身就是一个基于函数实现的类,类上挂载了很多方法和属性
  • 对于 Vue 的初始化过程,总结出两个步骤
    • 一个是 Vue的定义,也就是最里层的那个 Vue function 的定义
    • 另一个是 属性和原型方法,全局方法,静态方法的挂载
Vue 2到Vue 3升级实战:从评估、迁移到验证的全流程指南 前端框架的版本升级是大型项目演进中的关键环节,其核心在于响应式系统与组件化架构的迭代。Vue 3通过基于Proxy的全新响应式机制和Composition API,在性能优化与开发体验上实现了显著提升,这为构建高性能、可维护的现代Web应用提供了坚实的技术基础。在实际工程实践中,此类升级往往涉及依赖库兼容性、API变更适配以及构建工具链重构等多重挑战,尤其对于使用了Element UI等大型UI组件库的项目,需要系统性的迁移策略。本文聚焦于Vue 2.9.6至Vue 3.0的升级全过程,详细拆解了从项目现状 阅读详情

相关推荐

Workbench中基于nCode的列车转向架随机振动疲劳寿命预测方法

本文详细介绍了在ANSYS Workbench中结合nCode进行列车转向架随机振动疲劳寿命预测的完整方法。通过几何清理、模态分析、PSD载荷定义及随机振动求解,并重点阐述了nCode中Dirlik等疲劳算法的选择与应用,为轨道交通关键部件的可靠性设计提供了系统的仿真分析流程与工程实践指导。

weixin_29234423的博客 474

Vue2.x(2)

这里集结了有关Vue2.0的相关知识点,分为三大部分,这里是第二大部分.

qq_44930306的博客 591

基于Android13的系统启动流程分析(三)之FirstStageMain阶段

init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init1. Bootloader 引导当按下设备电源键时,最先运行的就是 bootloader(固化在ROM的程序),bootloader 的主要作用就是硬件设备(如 CPU、flash、内存)的初始化并加载到RAM,通过建立内存空间映射,为装载 Linux 内核做好准备,。

q1210249579的博客 5496

vue2入门基础-笔记

参考以上资料选择一些常用高频核心的Vue2知识进行总结归纳。

LlanyW的专栏 701

手把手教你用STM32实现SPWM逆变器控制(附完整代码)

本文详细介绍了如何使用STM32微控制器实现SPWM逆变器控制,包括硬件设计、PWM生成配置、正弦表生成与DMA传输,以及闭环控制与性能优化。通过完整的代码示例和实测数据,帮助开发者快速掌握SPWM技术,应用于新能源和电力电子领域。

weixin_29296241的博客 319

Python爬虫实战:汽车之家车型参数与口碑数据抓取分析

在当今信息爆炸的时代,购车决策已从传统的4S店咨询转变为数据驱动的智能化过程。汽车之家作为国内领先的汽车信息平台,汇聚了海量车型参数、车主口碑和专业评测数据。本文将详细介绍如何使用Python最新爬虫技术构建一个高效、稳定的汽车数据采集系统,通过多维度数据分析辅助用户做出更明智的购车决策。本项目将采用异步爬虫、智能反爬绕过、数据清洗与分析等现代化技术栈,完整实现从数据采集到可视化分析的全流程。本文详细介绍了如何使用Python最新技术构建一个功能完整的汽车之家数据爬虫系统。

2201_76125261的博客 1490

Vue2_组件

- 父组件 --> < div > FatherView父组件-->获取子组件数据,{{ str }} < SonView @change = " getSonData " > < script > import SonView from '@/components/SonView.vue' export default {return {

骑大马挎大刀 470

CRMEB开源电商系统 /api/products SQL注入漏洞复现(CVE-2024-36837)

2024年6月,CRMEB开源电商系统发布了新补丁,修复了一处SQL注入漏洞(CVE-2024-36837)。经分析,该漏洞可以通过请求api的路径接口来进行SQL注入,进而可能导致敏感信息泄露,该注入可暴露后台web绝对路径,深入利用可获取服务器权限,该漏洞无前置条件且利用简单,建议受影响的用户尽快修复漏洞。

0xSec 2883

vue2路由懒加载解决import引入报错问题

vue2路由懒加载解决import引入报错问题

见贤思齐焉,见不贤内自省 5863

YOLOv11改进 | 注意力篇 | YOLOv11引入CA注意力机制

摘要:最近关于移动网络设计的研究已经证明了通道注意力(例如,挤压和激励注意力)对于提升模型性能的显着有效性,但它们通常忽略了位置信息,而位置信息对于生成空间选择性注意力图很重要。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~3.2 在Extramodule里创建CA。在CA.py文件里添加给出的CA代码。

tsg6698的博客 2981

在 Fiori Elements Object Page 的表格中用 UI.Hidden 隐藏列:语义、边界与落地实践全解析

摘要: Fiori Elements的Object Page表格中,UI.Hidden注解支持静态和动态隐藏列。动态隐藏分为两种:基于父实体属性隐藏整列,或基于子实体属性按行隐藏单元格。关键约束包括:支持服务端操作的列禁止使用动态隐藏,否则会导致UX不一致。ABAP CDS不支持路径式UI.Hidden,需改用XML注解。该功能需与UI.Importance、个性化等机制明确区分,避免混淆。对于可能参与排序/过滤的列,建议仅使用静态隐藏。实际应用中需注意注解位置(整列或单元格级)和业务场景的匹配。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 206

vue2相关

vue2 零碎js相关 同步异步 fetch(url,options)//返回Promise 同步 const 结果=await Promise await关键字必须在一个标i记了async的function内来使用 异步 Promise.then(结果=>{…}) 导入导出 js src导入比较早的不支持导入导出,可以不同源策略 js type=“module” ,可以导入导出,必须同源策略 导包方式 require import方式 需要在package.

qq_40011574的博客 324

渗透测试之哥斯拉实战

可以直接在这里使用meterpreter命令进行对服务端的控制。选择目标 - 添加,配置连接信息,之后测试连接成功!php的shell功能如图。先要进行数据库的配置信息。可以直接在这里打包全站。

大河之犬的博客 2490

Vue.js 2.x API 知识梳理(一) 全局配置

Vue.js 2.x API 知识梳理(一) 全局配置 Vue.config是一个对象,包含Vue的全局配置。可以在启动应用之前修改指定属性。 这里不是指的@vue/cli的vue.config.js。 Demo源码 属性 类型 默认值 作用 silent Boolean false 隐藏vue所有的日志与警告 optionMergeStrategies { [key: ...

weixin_30526593的博客 372

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vite-plugin-vue-inspector常见问题排查:解决无法跳转源码的10个场景

你是否在使用vite-plugin-vue-inspector时遇到了无法跳转到源码的问题?这款强大的Vue调试工具能让开发者直接从浏览器中的Vue元素跳转到编辑器源代码,但配置不当或环境问题可能导致功能失效。本文将为你提供完整的排查指南,解决10个最常见的跳转问题场景!🚀 ## 1. 插件未正确安装和配置 🔧 vite-plugin-vue-inspector是一个专为Vue 3和Vit

gitblog_00294的博客 733

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Vue2-week3

表格插槽类型使用场景关键点默认插槽子组件只有一处需要填充内容,父组件直接写标签具名插槽子组件多处位置,区分不同区域,父组件 template 指定名字作用域插槽数据在子组件,结构父组件定子组件<slot :数据名="子组件数据">,父组件slot‑scope接收表格对象作用能不能修改 statestate存放共享原始数据❌不能直接改actions处理异步、业务判断❌不能直接改,调用 commitmutations唯一修改 state✅允许修改 stategetters。

2501_93485775的博客 235

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VUE2常见面试题

本文摘要: Vue相关技术核心概念解析 MVVM与MVC架构区别 MVC单向数据流,视图与控制器耦合 MVVM双向绑定,数据自动同步,解耦视图与模型 Vue核心特性 生命周期钩子函数执行顺序(8个阶段) 数据双向绑定原理(Object.defineProperty+发布订阅) 组件通信机制(父子props/emit、跨级provide/inject等) 虚拟DOM与diff算法优化渲染 计算属性与侦听器区别(缓存机制) 状态管理 Vuex工作流程(state/mutations/actions/getter

2301_76805327的博客 467

vue笔记

监听字符串、数字、布尔值等简单数据类型时,直接在watch中定义与数据同名的属性,属性值为处理函数(接收两个参数:新值newVal和旧值oldValdata() {return {username: '', // 简单数据age: 18},watch: {// 监听 username 的变化console.log('用户名从', oldVal, '变成了', newVal);},// 监听 age 的变化。

2301_79775040的博客 4297

Vue 2 单元测试为何坚持 Karma + Mocha + Webpack

单元测试是保障前端代码质量的核心工程实践,其本质在于在可控环境中验证组件行为的一致性与可预测性。Karma 作为浏览器调度中心,提供真实 DOM 环境执行能力;Mocha 以简洁、显式、无魔法的断言范式支撑可审计性;Webpack 则通过深度复用生产构建配置,确保测试与运行时行为高度一致。这种‘真环境+真编译+真状态’的技术组合,特别适用于需兼容 IE11、强依赖浏览器上下文、且与 Vue 2 + Webpack 4 深度耦合的中大型遗留系统。本文聚焦 Karma 配置原理、Mocha 断言范式及 Webp

weixin_33843947的博客 377

Vue3笔记

渲染快,虚拟 DOM 重写(优化 diff 算法),静态节点提升(Static Hoisting)和补丁标记(Patch Flags),减少运行时开销。Vue 3 于 2020 年 9 月发布,是 Vue.js 的重大升级版本,主要改进包括性能优化、新特性引入和更好的 TypeScript 支持。3.更好的 TypeScript 支持:源码使用 TypeScript 重写,提供完整的类型定义,开发体验更友好,IDE 提示更精准。目的:解决逻辑复用和代码组织问题(替代 Options API 的局限性)。

zxz86的博客 657

vue实践之路

npm install -g vue-cli vue init webpack vue_demo cd vue_demo npm install npm run dev 访问:http://localhost:8080/

michael_linux的博客,一个小小小学生。滴水穿石,步步为营,只为那刹那芳华。 454

v3-admin-vite 后台模板的 11 大已知限制:环境、路由、运行时三线排雷指南

你以为把 Vue3 后台模板 clone 下来、`pnpm dev` 就能一键起飞?作为基于 Vue3、Vite、TypeScript、Element Plus 的知名后台管理模板,v3-admin-vite 确实开箱即用,但它的"已知限制"比想象中更多:Node 版本不对装不上依赖、后端少返回一个 `code` 字段全部请求报错、开启三级路由缓存后菜单凭空消失、生产构建悄悄删掉你的 `conso

gitblog_01154的博客 187

Vue.js面试核心知识点与实战技巧解析

Vue.js作为主流前端框架,其响应式原理通过数据劫持实现视图自动更新,核心机制包含Object.defineProperty(Vue2)和Proxy(Vue3)两种实现方式。组件化开发中,合理的生命周期管理(如created发起请求、beforeDestroy清除资源)和多种通信方案(props/emit、provide/inject等)是工程实践的关键。性能优化方面,需重点关注虚拟DOM的diff算法和nextTick异步更新机制,结合v-if/v-show选择、路由懒加载等构建配置提升应用性能。在Vu

weixin_33795806的博客 385

Vue 完整版系统知识文档

《Vue全栈开发实战手册》摘要 本手册系统整合Vue2/Vue3全栈知识体系,涵盖基础语法、组件开发、状态管理、工程化等核心内容,适合从入门到精通的完整学习路径。主要特点: 基础核心 详解MVVM架构和响应式原理(Vue2的Object.defineProperty vs Vue3的Proxy) 完整模板语法规则与16种内置指令解析 组件系统核心:通信机制(8种方案)、插槽、动态组件、递归组件 进阶实战 状态管理:Vuex/Pinia完整解决方案 路由开发:动态路由、权限控制、懒加载 工程化:Webpack

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 402

【Vue全家桶+SSR+Koa2全栈开发】(七) 项目搭建与配置

Github上面可以直接查看所有前端知识点梳理,觉得不错,点个Star★,好运连连,Offer终究鼠于你,持续更新中。

超逸の学习技术博客 1375

大型项目微前端改造:用 Esmx 渐进式迁移的完整方案与踩坑记录

面对动辄几十个模块、多个技术栈并存的大型项目,微前端改造是很多团队绕不开的课题。传统的微前端方案大多依赖沙箱和运行时容器,改造成本高、性能损耗大。而 **Esmx 微前端框架** 基于原生 ESM 与 Import Map 构建,无需沙箱、零运行时开销,支持 Vue、React、Preact、Solid、Svelte 等多框架混编,非常适合大型项目采用 **渐进式迁移** 策略,让老系统边跑边改、

gitblog_01179的博客 275
上一篇: Vue2源码梳理:源码构建流程与运行时和编译时的版本选择
下一篇: Go语言中的包管理工具之Go Path的使用
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值