diff --git a/package.json b/package.json index 79d09ca..91a6da3 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "dev:app-android": "uni -p app-android", "dev:app-ios": "uni -p app-ios", "dev:custom": "uni -p", - "dev": "uni", + "dev": "node --experimental-loader ./scripts/window-path-loader.js node_modules/@dcloudio/vite-plugin-uni/bin/uni.js", "dev:test": "uni --mode test", "dev:prod": "uni --mode production", "dev:h5": "uni", diff --git a/scripts/window-path-loader.js b/scripts/window-path-loader.js new file mode 100644 index 0000000..21f41b8 --- /dev/null +++ b/scripts/window-path-loader.js @@ -0,0 +1,29 @@ +// fix: https://github.com/unibest-tech/unibest/issues/219 + +// Windows path loader for Node.js ESM +// This loader converts Windows absolute paths to file:// URLs + +import { pathToFileURL } from 'node:url' + +/** + * Resolve hook for ESM loader + * Converts Windows absolute paths to file:// URLs + */ +export function resolve(specifier, context, defaultResolve) { + // Check if this is a Windows absolute path (starts with drive letter like C:) + if (specifier.match(/^[a-z]:\\/i) || specifier.match(/^[a-z]:\//i)) { + // Convert Windows path to file:// URL + const fileUrl = pathToFileURL(specifier).href + return defaultResolve(fileUrl, context, defaultResolve) + } + + // For all other specifiers, use the default resolve + return defaultResolve(specifier, context, defaultResolve) +} + +/** + * Load hook for ESM loader + */ +export function load(url, context, defaultLoad) { + return defaultLoad(url, context, defaultLoad) +}