fix(docs): resolve @robonen/* workspace imports from source
The docs build pulls composables (via demos) and doc sections into its bundle, which transitively import workspace packages like @robonen/platform/multi. Aliasing each @robonen/* package to its src means the build no longer requires every package's dist to be built first, fixing CI where dists are absent.
This commit is contained in:
@@ -32,12 +32,30 @@ export default defineNuxtModule({
|
|||||||
// built-in `@` → srcDir alias.
|
// built-in `@` → srcDir alias.
|
||||||
const vueSrc = resolve(ROOT, 'vue/toolkit/src');
|
const vueSrc = resolve(ROOT, 'vue/toolkit/src');
|
||||||
|
|
||||||
|
// Resolve `@robonen/*` workspace imports (pulled in transitively by demos and
|
||||||
|
// doc sections) from SOURCE rather than built `dist/`. Without this the docs
|
||||||
|
// build depends on every workspace package being built first — which CI does
|
||||||
|
// not guarantee (e.g. a composable importing `@robonen/platform/multi` fails
|
||||||
|
// to resolve when platform's dist is absent). Prefix aliases also cover
|
||||||
|
// subpath exports (`@robonen/platform/multi` → `core/platform/src/multi`).
|
||||||
|
const workspaceSrc: Record<string, string> = {
|
||||||
|
'@robonen/stdlib': 'core/stdlib/src',
|
||||||
|
'@robonen/platform': 'core/platform/src',
|
||||||
|
'@robonen/fetch': 'core/fetch/src',
|
||||||
|
'@robonen/encoding': 'core/encoding/src',
|
||||||
|
'@robonen/crdt': 'core/crdt/src',
|
||||||
|
'@robonen/editor': 'vue/editor/src',
|
||||||
|
'@robonen/primitives': 'vue/primitives/src',
|
||||||
|
'@robonen/vue': vueSrc,
|
||||||
|
};
|
||||||
|
|
||||||
nuxt.hook('vite:extendConfig', (config) => {
|
nuxt.hook('vite:extendConfig', (config) => {
|
||||||
const existing = config.resolve?.alias;
|
const existing = config.resolve?.alias;
|
||||||
const sourceAliases = [
|
const sourceAliases = [
|
||||||
{ find: '@/composables', replacement: resolve(vueSrc, 'composables') },
|
{ find: '@/composables', replacement: resolve(vueSrc, 'composables') },
|
||||||
{ find: '@/types', replacement: resolve(vueSrc, 'types') },
|
{ find: '@/types', replacement: resolve(vueSrc, 'types') },
|
||||||
{ find: '@/utils', replacement: resolve(vueSrc, 'utils') },
|
{ find: '@/utils', replacement: resolve(vueSrc, 'utils') },
|
||||||
|
...Object.entries(workspaceSrc).map(([find, rel]) => ({ find, replacement: resolve(ROOT, rel) })),
|
||||||
];
|
];
|
||||||
|
|
||||||
if (Array.isArray(existing)) {
|
if (Array.isArray(existing)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user