Skip to content

Commit

Permalink
feat: try to support global install
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed May 26, 2021
1 parent a9eaffe commit 88c244a
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 20 deletions.
2 changes: 1 addition & 1 deletion packages/client/internals/SlideContainer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const props = defineProps({
default: () => ({}) as any,
},
scale: {
type: Number,
type: [Number, String],
},
})
Expand Down
4 changes: 2 additions & 2 deletions packages/client/windi.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import { resolve, dirname } from 'path'
import { isTruthy } from '@antfu/utils'
import { DefaultExtractor, defineConfig } from 'vite-plugin-windicss'
import typography from 'windicss/plugin/typography'
import { sync } from 'resolve'
import { sync as resolvePkg } from 'resolve'

export function resolveImportPath(importName: string) {
return sync(importName, {
return resolvePkg(importName, {
preserveSymlinks: false,
})
}
Expand Down
6 changes: 3 additions & 3 deletions packages/slidev/node/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import RemoteAssets from 'vite-plugin-remote-assets'
import { ArgumentsType, uniq } from '@antfu/utils'
import { SlidevMarkdown } from '@slidev/types'
import * as parser from '@slidev/parser/fs'
import { packageExists, promptForThemeInstallation, resolveThemeName } from './themes'
import { resolveImportPath } from './utils'
import { packageExists, promptForThemeInstallation, resolveThemeName } from './themes'

export interface SlidevEntryOptions {
/**
Expand Down Expand Up @@ -55,7 +55,7 @@ export interface SlidevPluginOptions extends SlidevEntryOptions {
}

export function getClientRoot() {
return dirname(resolveImportPath('@slidev/client/package.json'))
return dirname(resolveImportPath('@slidev/client/package.json', true))
}

export function getCLIRoot() {
Expand All @@ -78,7 +78,7 @@ export function getThemeRoots(name: string, entry: string) {
}
else {
return [
dirname(resolveImportPath(`${name}/package.json`)),
dirname(resolveImportPath(`${name}/package.json`, true)),
]
}
}
Expand Down
1 change: 1 addition & 0 deletions packages/slidev/node/plugins/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { toAtFS } from '../utils'

const EXCLUDE = [
'@slidev/types',
'@slidev/shared',
'mermaid',
'@vueuse/core',
'@vueuse/shared',
Expand Down
9 changes: 3 additions & 6 deletions packages/slidev/node/themes.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import prompts from 'prompts'
import { parseNi, run } from '@antfu/ni'
import { isRelative } from './options'
import { resolveImportPath } from './utils'
import { isRelative } from './options'

const officialThemes: Record<string, string> = {
'none': '',
Expand All @@ -11,11 +11,8 @@ const officialThemes: Record<string, string> = {
}

export function packageExists(name: string) {
try {
if (resolveImportPath(`${name}/package.json`))
return true
}
catch {}
if (resolveImportPath(`${name}/package.json`))
return true
return false
}

Expand Down
26 changes: 21 additions & 5 deletions packages/slidev/node/utils.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,28 @@
import { ensurePrefix, slash } from '@antfu/utils'
import { sync } from 'resolve'
import { sync as resolve } from 'resolve'
import resolveGlobal from 'resolve-global'

export function toAtFS(path: string) {
return `/@fs${ensurePrefix('/', slash(path))}`
}

export function resolveImportPath(importName: string) {
return sync(importName, {
preserveSymlinks: false,
})
export function resolveImportPath(importName: string, ensure: true): string
export function resolveImportPath(importName: string, ensure?: boolean): string | undefined
export function resolveImportPath(importName: string, ensure = false) {
try {
return resolve(importName, {
preserveSymlinks: false,
})
}
catch {}

try {
return resolveGlobal(importName)
}
catch {}

if (ensure)
throw new Error(`Failed to resolve package "${importName}"`)

return undefined
}
2 changes: 2 additions & 0 deletions packages/slidev/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"connect": "^3.7.0",
"fast-glob": "^3.2.5",
"fs-extra": "^10.0.0",
"is-installed-globally": "^0.4.0",
"jiti": "^1.9.2",
"js-base64": "^3.6.1",
"katex": "^0.13.11",
Expand All @@ -72,6 +73,7 @@
"prismjs": "^1.23.0",
"prompts": "^2.4.1",
"resolve": "^1.20.0",
"resolve-global": "^1.0.0",
"shiki": "^0.9.4",
"sirv": "^1.0.12",
"vite": "^2.3.4",
Expand Down
46 changes: 43 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 88c244a

Please sign in to comment.