@melt-js/demo-vue3 0.0.0-stage → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,48 @@
1
- # Temporary Holding Version
1
+ # @melt-js/demo-vue3
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Vue 3 + Vite 5 的 hel 宿主(消费方)示例,消费 [`comps-vue3`](../comps-vue3)。
4
+
5
+ | 项 | 值 |
6
+ | --- | --- |
7
+ | npm 包名 | `@melt-js/demo-vue3` |
8
+ | unpkg 入口 | `https://unpkg.com/@melt-js/demo-vue3/dist/index.html` |
9
+ | 端口 | `30020` |
10
+ | 消费的远程组件 | `comps-vue3`(开发 `http://localhost:20020` / 生产 unpkg) |
11
+
12
+ ## 关键流程
13
+
14
+ 1. `src/main.ts`:`bindVueRuntime({ Vue })` 把宿主 vue 挂到 `window.Vue`,远程组件 external 的 `vue` 会复用这一份(少了这一份会出现双 vue,表现为远程组件点击后视图不更新);随后在入口处调用 `loadRemoteLib()` 预加载远程组件,就绪后再挂载宿主。
15
+ 2. `src/configs/remote.ts`:按 `import.meta.env.PROD` 选择远端地址——生产构建指向 unpkg 上的 `hel-meta.json`,本地开发指向 `http://localhost:20020`,可用 `VITE_REMOTE_HOST` 覆盖。`loadRemoteLib()` 内部调用 `preFetchLib('comps-vue3', { custom: { host } })`:host 为 `hel-meta.json` 时直接取元数据,本地 dev server 没有该文件时解析 `index.html`。
16
+ 3. `src/App.vue`:`defineAsyncComponent` 复用入口处已预加载的同一个 Promise,渲染远程组件的 `HelloWorld`。
17
+
18
+ > `vite build` 的产物会自动从 unpkg 加载已发布的 `comps-vue3`;`vite dev` 仍走本地 20020,无需手动改 `host`。
19
+
20
+ ## 本地开发
21
+
22
+ ```bash
23
+ # 终端 1:起远程组件(20020)
24
+ pnpm comps-vue3:dev
25
+
26
+ # 终端 2:起宿主(30020)
27
+ pnpm demo-vue3:dev
28
+ ```
29
+
30
+ 打开 http://localhost:30020 ,`远程组件内容` 区域会渲染 `comps-vue3` 的 `HelloWorld` 组件。
31
+
32
+ 也可以让宿主指向已构建的远程产物:
33
+
34
+ ```bash
35
+ pnpm comps-vue3:build:local && pnpm comps-vue3:preview # 20020 上跑 hel_dist
36
+ pnpm demo-vue3:dev
37
+ ```
38
+
39
+ ## 构建 / 发布
40
+
41
+ ```bash
42
+ pnpm demo-vue3:build # 产出 dist/
43
+ pnpm --filter @melt-js/demo-vue3 run publish:stage # build → npm stage 暂存,等待 2FA 审批
44
+ ```
45
+
46
+ - `vite.config.ts` 的 `base` 为 `./`,发布后 unpkg 上的 `dist/index.html` 可直接加载同目录资源。
47
+ - `files` 白名单只发布 `dist/` 与 README。
48
+ - 生产构建自动使用 `https://unpkg.com/@melt-js/comps-vue3/hel_dist/hel-meta.json`,本地开发自动使用 `http://localhost:20020`;也可用 `VITE_REMOTE_HOST` 覆盖。
@@ -0,0 +1 @@
1
+ .host-actions[data-v-82d6e96f]{display:flex;flex-wrap:wrap;gap:10px;margin-top:14px}
@@ -0,0 +1,2 @@
1
+ import{d as l,f as r,g as e,m as d,t as i,b as p,o as _}from"./index-CuPzn6_v.js";const c={class:"demo-page"},m={class:"demo-card"},u={class:"host-actions"},b=l({__name:"HostView",setup(s){const o=p(0);return(n,t)=>(_(),r("div",c,[t[4]||(t[4]=e("header",null,[e("p",{class:"demo-page__eyebrow"},"主应用"),e("h1",{class:"demo-page__title"},"宿主自己的内容"),e("p",{class:"demo-page__lead"},[d(" 这块内容完全由宿主渲染,用来对照远程组件:两者用的是同一份 Vue 运行时 ("),e("code",null,"bindVueRuntime"),d(" 注入),所以点击计数都应该即时更新。 ")])],-1)),e("section",m,[t[2]||(t[2]=e("h2",{class:"demo-card__title"},"主应用内容",-1)),t[3]||(t[3]=e("p",{class:"demo-card__text"},"宿主按钮的计数只存在宿主里,与远程组件无关。",-1)),e("div",u,[e("button",{type:"button",class:"demo-btn",onClick:t[0]||(t[0]=a=>o.value++)}," host 工程中的按钮 "+i(o.value),1),e("button",{type:"button",class:"demo-btn demo-btn--ghost",onClick:t[1]||(t[1]=a=>o.value=0)}," 重置 ")])])]))}}),v=(s,o)=>{const n=s.__vccOpts||s;for(const[t,a]of o)n[t]=a;return n},g=v(b,[["__scopeId","data-v-82d6e96f"]]);export{g as default};
2
+ //# sourceMappingURL=HostView-p_QlXO2b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostView-p_QlXO2b.js","sources":["../../src/views/HostView.vue"],"sourcesContent":["<template>\n <div class=\"demo-page\">\n <header>\n <p class=\"demo-page__eyebrow\">主应用</p>\n <h1 class=\"demo-page__title\">宿主自己的内容</h1>\n <p class=\"demo-page__lead\">\n 这块内容完全由宿主渲染,用来对照远程组件:两者用的是同一份 Vue 运行时\n (<code>bindVueRuntime</code> 注入),所以点击计数都应该即时更新。\n </p>\n </header>\n\n <section class=\"demo-card\">\n <h2 class=\"demo-card__title\">主应用内容</h2>\n <p class=\"demo-card__text\">宿主按钮的计数只存在宿主里,与远程组件无关。</p>\n <div class=\"host-actions\">\n <button type=\"button\" class=\"demo-btn\" @click=\"num++\">\n host 工程中的按钮 {{ num }}\n </button>\n <button type=\"button\" class=\"demo-btn demo-btn--ghost\" @click=\"num = 0\">\n 重置\n </button>\n </div>\n </section>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nconst num = ref(0)\n</script>\n\n<style scoped>\n.host-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n margin-top: 14px;\n}\n</style>\n"],"names":["num","ref","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_cache","_hoisted_3"],"mappings":"6LA6BA,MAAMA,EAAMC,EAAI,CAAC,gBA5BfC,EAAA,EAAAC,EAsBM,MAtBNC,EAsBM,aArBJC,EAOS,SAAA,KAAA,CANPA,EAAqC,IAAA,CAAlC,MAAM,oBAAA,EAAqB,KAAG,EACjCA,EAAyC,KAAA,CAArC,MAAM,kBAAA,EAAmB,SAAO,EACpCA,EAGI,IAAA,CAHD,MAAM,mBAAiB,GAAC,0CAExB,EAAAA,EAA2B,YAArB,gBAAc,IAAO,sBAC9B,CAAA,SAGFA,EAWU,UAXVC,EAWU,CAVRC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAF,EAAuC,KAAA,CAAnC,MAAM,kBAAA,EAAmB,QAAK,EAAA,GAClCE,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAF,EAAqD,IAAA,CAAlD,MAAM,iBAAA,EAAkB,yBAAsB,EAAA,GACjDA,EAOM,MAPNG,EAOM,CANJH,EAES,SAAA,CAFD,KAAK,SAAS,MAAM,WAAY,uBAAOL,EAAA,QAAA,EAAO,kBACrCA,EAAA,KAAG,EAAA,CAAA,EAEpBK,EAES,SAAA,CAFD,KAAK,SAAS,MAAM,2BAA4B,uBAAOL,EAAA,MAAG,EAAA,EAAM,MAExE,CAAA"}
@@ -0,0 +1,2 @@
1
+ import{d as v,A as d}from"./loadApp-B7EqU81T.js";import{d as g,f as m,g as l,t as n,u as o,m as t,R as k,L as f,U as V,F as E,j as b,o as r,k as c,l as x,e as T}from"./index-CuPzn6_v.js";const O={class:"demo-page"},y={class:"demo-page__title"},L={class:"demo-table"},R=["href"],h={class:"demo-grid"},w={class:"demo-card__title"},A={class:"demo-card__text"},N=g({__name:"OverviewView",setup(B){const p=v.filter(u=>u.name&&u.name!=="overview");return(u,e)=>{const _=T("router-link");return r(),m("div",O,[l("header",null,[e[0]||(e[0]=l("p",{class:"demo-page__eyebrow"},"Vue 3 · hel 宿主",-1)),l("h1",y,n(o(d).name)+" 简介",1),e[1]||(e[1]=l("p",{class:"demo-page__lead"},[t(" Vue 3 + Vite 5 的 hel 宿主(消费方)示例:入口处用 "),l("code",null,"bindVueRuntime"),t(" 注入宿主 Vue 运行时,再用 "),l("code",null,"preFetchLib"),t(" 预加载远程组件 "),l("code",null,"comps-vue3"),t("。 顶部导航栏用于切换示例,示例区右上角的「全屏」按钮可以只把示例内容放大到全屏。 ")],-1))]),l("table",L,[l("tbody",null,[e[7]||(e[7]=l("tr",null,[l("th",null,"npm 包名"),l("td",null,[l("code",null,"@melt-js/demo-vue3")])],-1)),l("tr",null,[e[2]||(e[2]=l("th",null,"unpkg 入口",-1)),l("td",null,[l("a",{href:o(d).unpkgEntry,target:"_blank",rel:"noopener"},n(o(d).unpkgEntry),9,R)])]),l("tr",null,[e[3]||(e[3]=l("th",null,"本地端口",-1)),l("td",null,n(o(d).port),1)]),l("tr",null,[e[6]||(e[6]=l("th",null,"远程组件",-1)),l("td",null,[l("div",null,[l("code",null,n(o(k)),1)]),l("div",null,[e[4]||(e[4]=t("开发:",-1)),l("code",null,n(o(f)),1)]),l("div",null,[e[5]||(e[5]=t("生产:",-1)),l("code",null,n(o(V)),1)])])]),e[8]||(e[8]=l("tr",null,[l("th",null,"运行时共享"),l("td",null,[l("code",null,"bindVueRuntime({ Vue })"),t(",远程组件 external 的 vue 复用宿主这一份")])],-1)),e[9]||(e[9]=l("tr",null,[l("th",null,"路由模式"),l("td",null,[t(" hash("),l("code",null,"#/remote"),t("),保证从 unpkg 的 "),l("code",null,"dist/index.html"),t(" 直接打开也能切换示例 ")])],-1))])]),l("section",null,[e[11]||(e[11]=l("h2",{class:"demo-page__section-title"},"示例导航",-1)),l("div",h,[(r(!0),m(E,null,b(o(p),s=>(r(),c(_,{key:s.path,to:s.path,class:"demo-card demo-card--link"},{default:x(()=>{var a,i;return[l("h3",w,n((a=s.meta)==null?void 0:a.title),1),l("p",A,n((i=s.meta)==null?void 0:i.description),1),e[10]||(e[10]=l("span",{class:"demo-card__action"},"进入示例 →",-1))]}),_:2},1032,["to"]))),128))])]),e[12]||(e[12]=l("p",{class:"demo-note"},[t(" 本地开发先执行 "),l("code",null,"pnpm comps-vue3:dev"),t("(20020),再执行 "),l("code",null,"pnpm demo-vue3:dev"),t(" 打开 http://localhost:30020;远端地址可用 "),l("code",null,"VITE_REMOTE_HOST"),t(" 覆盖。 ")],-1))])}}});export{N as default};
2
+ //# sourceMappingURL=OverviewView-Y30WcRVR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverviewView-Y30WcRVR.js","sources":["../../src/views/OverviewView.vue"],"sourcesContent":["<template>\n <div class=\"demo-page\">\n <header>\n <p class=\"demo-page__eyebrow\">Vue 3 · hel 宿主</p>\n <h1 class=\"demo-page__title\">{{ APP_META.name }} 简介</h1>\n <p class=\"demo-page__lead\">\n Vue 3 + Vite 5 的 hel 宿主(消费方)示例:入口处用\n <code>bindVueRuntime</code> 注入宿主 Vue 运行时,再用\n <code>preFetchLib</code> 预加载远程组件 <code>comps-vue3</code>。\n 顶部导航栏用于切换示例,示例区右上角的「全屏」按钮可以只把示例内容放大到全屏。\n </p>\n </header>\n\n <table class=\"demo-table\">\n <tbody>\n <tr>\n <th>npm 包名</th>\n <td><code>@melt-js/demo-vue3</code></td>\n </tr>\n <tr>\n <th>unpkg 入口</th>\n <td>\n <a :href=\"APP_META.unpkgEntry\" target=\"_blank\" rel=\"noopener\">{{ APP_META.unpkgEntry }}</a>\n </td>\n </tr>\n <tr>\n <th>本地端口</th>\n <td>{{ APP_META.port }}</td>\n </tr>\n <tr>\n <th>远程组件</th>\n <td>\n <div><code>{{ REMOTE_LIB_NAME }}</code></div>\n <div>开发:<code>{{ LOCAL_HOST }}</code></div>\n <div>生产:<code>{{ UNPKG_HOST }}</code></div>\n </td>\n </tr>\n <tr>\n <th>运行时共享</th>\n <td><code>bindVueRuntime({ Vue })</code>,远程组件 external 的 vue 复用宿主这一份</td>\n </tr>\n <tr>\n <th>路由模式</th>\n <td>\n hash(<code>#/remote</code>),保证从 unpkg 的 <code>dist/index.html</code>\n 直接打开也能切换示例\n </td>\n </tr>\n </tbody>\n </table>\n\n <section>\n <h2 class=\"demo-page__section-title\">示例导航</h2>\n <div class=\"demo-grid\">\n <router-link\n v-for=\"item in examples\"\n :key=\"item.path\"\n :to=\"item.path\"\n class=\"demo-card demo-card--link\"\n >\n <h3 class=\"demo-card__title\">{{ item.meta?.title }}</h3>\n <p class=\"demo-card__text\">{{ item.meta?.description }}</p>\n <span class=\"demo-card__action\">进入示例 →</span>\n </router-link>\n </div>\n </section>\n\n <p class=\"demo-note\">\n 本地开发先执行 <code>pnpm comps-vue3:dev</code>(20020),再执行\n <code>pnpm demo-vue3:dev</code> 打开 http://localhost:30020;远端地址可用\n <code>VITE_REMOTE_HOST</code> 覆盖。\n </p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { APP_META } from '../configs/app'\nimport { LOCAL_HOST, REMOTE_LIB_NAME, UNPKG_HOST } from '../configs/remote'\nimport { demoRoutes } from '../router'\n\n// 简介页也列出其余示例,方便直接跳转\nconst examples = demoRoutes.filter((item) => item.name && item.name !== 'overview')\n</script>\n"],"names":["examples","demoRoutes","item","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_cache","_hoisted_2","_toDisplayString","_unref","_hoisted_3","APP_META","_hoisted_4","REMOTE_LIB_NAME","LOCAL_HOST","UNPKG_HOST","_hoisted_5","_Fragment","_renderList","_createBlock","_component_router_link","_hoisted_6","_a","_hoisted_7","_b"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{d as a,f as c,g as e,m as o,k as d,A as m,u as r,C as p,o as t,D as u}from"./index-CuPzn6_v.js";const i={class:"demo-page"},_={class:"demo-remote"},f=a({__name:"RemoteView",setup(v){const n=p({loader:async()=>{console.log("[demo-vue3] 开始加载远程组件...");try{const s=await u();return console.log("[demo-vue3] 远程组件加载完成:",s),s.HelloWorld}catch(s){throw console.error("[demo-vue3] 获取远程组件失败:",s),s}},timeout:1e4});return(s,l)=>(t(),c("div",i,[l[0]||(l[0]=e("header",null,[e("p",{class:"demo-page__eyebrow"},"远程组件"),e("h1",{class:"demo-page__title"},"comps-vue3 · HelloWorld"),e("p",{class:"demo-page__lead"},[o(" 下面的组件由 "),e("code",null,"preFetchLib('comps-vue3')"),o(" 从远端加载,宿主产物里没有它。 组件内的计数按钮验证远程组件复用的是宿主注入的那一份 Vue 运行时。 ")])],-1)),e("div",_,[(t(),d(m(r(n)),{msg:"来自 demo-vue3 的问候"}))]),l[1]||(l[1]=e("p",{class:"demo-note"},[o(" 远端地址:开发 "),e("code",null,"http://localhost:20020"),o("(先执行 "),e("code",null,"pnpm comps-vue3:dev"),o("),生产 "),e("code",null,"unpkg"),o(" 上的 "),e("code",null,"hel-meta.json"),o(";也可用 "),e("code",null,"VITE_REMOTE_HOST"),o(" 覆盖。 ")],-1))]))}});export{f as default};
2
+ //# sourceMappingURL=RemoteView-DMITrjYR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteView-DMITrjYR.js","sources":["../../src/views/RemoteView.vue"],"sourcesContent":["<template>\n <div class=\"demo-page\">\n <header>\n <p class=\"demo-page__eyebrow\">远程组件</p>\n <h1 class=\"demo-page__title\">comps-vue3 · HelloWorld</h1>\n <p class=\"demo-page__lead\">\n 下面的组件由 <code>preFetchLib('comps-vue3')</code> 从远端加载,宿主产物里没有它。\n 组件内的计数按钮验证远程组件复用的是宿主注入的那一份 Vue 运行时。\n </p>\n </header>\n\n <div class=\"demo-remote\">\n <component :is=\"RemoteComp\" msg=\"来自 demo-vue3 的问候\" />\n </div>\n\n <p class=\"demo-note\">\n 远端地址:开发 <code>http://localhost:20020</code>(先执行\n <code>pnpm comps-vue3:dev</code>),生产 <code>unpkg</code> 上的\n <code>hel-meta.json</code>;也可用 <code>VITE_REMOTE_HOST</code> 覆盖。\n </p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { defineAsyncComponent } from 'vue'\nimport { loadRemoteLib } from '../configs/remote'\n\nconst RemoteComp = defineAsyncComponent({\n loader: async () => {\n console.log('[demo-vue3] 开始加载远程组件...')\n\n try {\n // 入口处已经预加载,这里复用同一个 Promise(通常已 resolve)\n const lib = await loadRemoteLib()\n\n console.log('[demo-vue3] 远程组件加载完成:', lib)\n return lib.HelloWorld\n } catch (err) {\n console.error('[demo-vue3] 获取远程组件失败:', err)\n throw err\n }\n },\n timeout: 10000,\n})\n</script>\n"],"names":["RemoteComp","defineAsyncComponent","lib","loadRemoteLib","err","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createBlock","_resolveDynamicComponent","_unref"],"mappings":"6LA2BA,MAAMA,EAAaC,EAAqB,CACtC,OAAQ,SAAY,CAClB,QAAQ,IAAI,yBAAyB,EAErC,GAAI,CAEF,MAAMC,EAAM,MAAMC,EAAA,EAElB,eAAQ,IAAI,wBAAyBD,CAAG,EACjCA,EAAI,UACb,OAASE,EAAK,CACZ,cAAQ,MAAM,wBAAyBA,CAAG,EACpCA,CACR,CACF,EACA,QAAS,GAAA,CACV,gBA1CCC,EAAA,EAAAC,EAmBM,MAnBNC,EAmBM,aAlBJC,EAOS,SAAA,KAAA,CANPA,EAAsC,IAAA,CAAnC,MAAM,oBAAA,EAAqB,MAAI,EAClCA,EAAyD,KAAA,CAArD,MAAM,kBAAA,EAAmB,yBAAuB,EACpDA,EAGI,IAAA,CAHD,MAAM,mBAAiB,GAAC,UAClB,EAAAA,EAAsC,YAAhC,2BAAyB,IAAO,uDAE/C,CAAA,SAGFA,EAEM,MAFNC,EAEM,EADJJ,EAAA,EAAAK,EAAqDC,EAArCC,EAAAZ,CAAA,CAAU,EAAA,CAAE,IAAI,mBAAkB,EAAA,eAGpDQ,EAII,IAAA,CAJD,MAAM,aAAW,GAAC,WACX,EAAAA,EAAmC,YAA7B,wBAAsB,IAAO,OAC3C,EAAAA,EAAgC,YAA1B,qBAAmB,IAAO,OAAK,EAAAA,EAAkB,YAAZ,OAAK,IAAO,MACvD,EAAAA,EAA0B,YAApB,eAAa,IAAO,OAAK,EAAAA,EAA6B,YAAvB,kBAAgB,IAAO,OAC9D,CAAA"}