vite.config.ts
import { unstable_vitePlugin as remix } from '@remix-run/dev'
import { installGlobals } from '@remix-run/node'
import { defineConfig } from 'vite'
import tsconfigPaths from 'vite-tsconfig-paths'
import remixConfig from './remix.config'
installGlobals()
export default defineConfig({
server: {
port: 3000,
},
build: {
sourcemap: process.env.NODE_ENV !== 'production',
},
plugins: [remix(remixConfig), tsconfigPaths()],
})
remix.config.js (I'm using remix-flat-routes, so if you're not using it you can just omit the routes: config)
import { flatRoutes } from 'remix-flat-routes'
export default {
ignoredRouteFiles: ['**/.*'],
serverDependenciesToBundle: ['@trigger.dev/react'],
routes: (defineRoutes) => {
return flatRoutes('routes', defineRoutes)
},
}
app/routes/api.trigger.ts
import { type ActionFunctionArgs, json } from '@vercel/remix'
import { triggerClient } from '~/backend/clients/triggerClient'
export async function action({ request }: ActionFunctionArgs) {
await import('~/jobs/myJob.server')
[...,]
const response = await triggerClient.handleRequest(request)
if (!response) {
return json({ error: 'Not found' }, { status: 404 })
}
return json(response.body, { status: response.status, headers: response.headers })
}
All your xxxJob.server.ts needs to export the jobs explicitly, e.g.:
export const myJob = triggerClient.defineJob({
[...]
triggerClient.ts
import { TriggerClient } from '@trigger.dev/sdk'
import { env } from '~/env'
export const triggerClient = new TriggerClient({
id: env.server.TRIGGER_PROJECT_ID,
apiKey: env.server.TRIGGER_API_KEY,
apiUrl: env.server.TRIGGER_API_URL,
})