Vite plugin for Adobe UXP Photoshop projects.
manifest.json into build outputdist/photoshop, uxp, fs, os, path, process, shell)<script type="module"...> to <script...> in index.htmladobe: protocol from module specifiers in final JS output, so you can use adobe:photoshop instead of photoshop in your source code (similar to how node: protocol works)@bubblydoo/vite-uxp-plugin/runtime virtual runtime:
--mode development), enables websocket hot reloadws://localhost:<port> to manifest.requiredPermissions.network.domainsvite serve or vite dev and HMR are not supported for UXP projects.
There are a couple of reasons:
<script type="module"> does not work), and Vite HMR relies on ES modules.@vite/plugin-legacy could work, but it does not support dev mode.Use:
vite build --watch --mode developmentvite buildpnpm add -D @bubblydoo/vite-uxp-plugin vite
vite.config.ts:
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import tsconfigPaths from 'vite-tsconfig-paths';
import { uxp } from '@bubblydoo/vite-uxp-plugin';
import { manifest } from './uxp.config';
export default defineConfig({
plugins: [
react(),
tsconfigPaths(),
uxp(manifest),
],
});
Plugin entry file (for hot reload runtime):
import '@bubblydoo/vite-uxp-plugin/runtime';
Native module imports can use either form in source code:
import { app } from 'photoshop'; // => const { app } = require('photoshop');
import { app as app2 } from 'adobe:photoshop'; // => const { app: app2 } = require('photoshop');
uxp(manifest, config?)manifest: UxpManifestconfig.hotReloadPort?: number (default: 8081)uxpPHOTOSHOP_NATIVE_MODULESUxpManifestUxpViteConfig