diff --git a/crates/axum_bundler/src/bundle.rs b/crates/axum_bundler/src/bundle.rs index 687ce3b5..13365f7d 100644 --- a/crates/axum_bundler/src/bundle.rs +++ b/crates/axum_bundler/src/bundle.rs @@ -7,6 +7,11 @@ use std::path::PathBuf; const ROOT_FOLDER: &'static str = "src/routes"; +enum Mode { + Prod, + Dev, +} + const AXUM_ENTRY_POINT: &'static str = r##" // File automatically generated // Do not manually change it @@ -17,6 +22,8 @@ use axum::{routing::get, Router}; use tower_http::services::ServeDir; use tuono_lib::{ssr, Ssr}; +const MODE: &'static = "prod"; + // MODULE_IMPORTS #[tokio::main] diff --git a/crates/cli/src/actions/build.rs b/crates/cli/src/actions/build.rs index d661e00a..70ea7196 100644 --- a/crates/cli/src/actions/build.rs +++ b/crates/cli/src/actions/build.rs @@ -1,5 +1,11 @@ use axum_bundler::bundle_axum_source; +use std::process::Command; pub fn run() { + // TODO: Pass "build" argument to update SSR path bundle_axum_source(); + + println!("Build JS source"); + let mut vite_build = Command::new("./node_modules/.bin/tuono-build-prod"); + let _ = &vite_build.output().unwrap(); } diff --git a/crates/tuono_lib/src/ssr.rs b/crates/tuono_lib/src/ssr.rs index 316a9a36..a1e5e8ff 100644 --- a/crates/tuono_lib/src/ssr.rs +++ b/crates/tuono_lib/src/ssr.rs @@ -3,9 +3,11 @@ use std::cell::RefCell; use std::fs::read_to_string; pub struct Js; + impl Js { thread_local! { pub static SSR: RefCell> = RefCell::new( + // TODO: handle here dev/prod source Ssr::from( read_to_string("./.tuono/server/dev-server.js").unwrap(), "" diff --git a/packages/tuono/package.json b/packages/tuono/package.json index cf287c3b..f3738a7e 100644 --- a/packages/tuono/package.json +++ b/packages/tuono/package.json @@ -39,7 +39,8 @@ }, "bin": { "tuono-dev-ssr": "./bin/dev-ssr.js", - "tuono-dev-watch": "./bin/watch.js" + "tuono-dev-watch": "./bin/watch.js", + "tuono-build-prod": "./bin/build-prod.js" }, "files": [ "dist", diff --git a/packages/tuono/src/build/index.ts b/packages/tuono/src/build/index.ts index afb109b4..b266e934 100644 --- a/packages/tuono/src/build/index.ts +++ b/packages/tuono/src/build/index.ts @@ -48,7 +48,6 @@ export function developmentCSRWatch() { }, build: { manifest: true, - outDir: '../out', emptyOutDir: true, rollupOptions: { input: './.tuono/client-main.tsx', @@ -58,3 +57,40 @@ export function developmentCSRWatch() { await server.listen() })() } + +export function buildProd() { + ;(async () => { + await build({ + ...BASE_CONFIG, + manifest: true, + build: { + outDir: '../out/client', + }, + emptyOutDir: true, + rollupOptions: { + input: './.tuono/client-main.tsx', + }, + }) + + await build({ + ...BASE_CONFIG, + build: { + ssr: true, + minify: false, + outDir: '../out/server', + emptyOutDir: true, + rollupOptions: { + input: './.tuono/server-main.tsx', + output: { + entryFileNames: 'prod-server.js', + format: 'iife', + }, + }, + }, + ssr: { + target: 'webworker', + noExternal: true, + }, + }) + })() +}