前端工程化

This commit is contained in:
2026-08-13 01:52:42 +08:00
parent 75bb281d4e
commit 3e9b924776
79 changed files with 4760 additions and 3989 deletions
+70 -11
View File
@@ -4,6 +4,76 @@ if (RENDERIVE_BUILD_TESTS)
endif ()
rcl_add_dependency_action_targets(Renderive_Web_env ${Renderive_Web_dependencies})
set_target_properties(Renderive_Web_env PROPERTIES FOLDER Renderive_Web)
if (CMAKE_CONFIGURATION_TYPES)
set(Renderive_Web_assets_dir "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/webapp_gallery")
else ()
set(Renderive_Web_assets_dir "${CMAKE_CURRENT_BINARY_DIR}/webapp_gallery")
endif ()
set(Renderive_Web_node_search_paths)
if (WIN32 AND DEFINED ENV{APPDATA})
file(GLOB Renderive_Web_clion_node_versions LIST_DIRECTORIES true
"$ENV{APPDATA}/JetBrains/CLion*/node/versions/*")
list(SORT Renderive_Web_clion_node_versions COMPARE NATURAL ORDER DESCENDING)
foreach (Renderive_Web_clion_node_version IN LISTS Renderive_Web_clion_node_versions)
if (EXISTS "${Renderive_Web_clion_node_version}/node.exe"
AND EXISTS "${Renderive_Web_clion_node_version}/npm.cmd")
list(APPEND Renderive_Web_node_search_paths "${Renderive_Web_clion_node_version}")
endif ()
endforeach ()
endif ()
find_program(Renderive_Web_node_executable NAMES node node.exe
HINTS ${Renderive_Web_node_search_paths} REQUIRED)
if (WIN32)
find_program(Renderive_Web_npm_executable NAMES npm.cmd
HINTS ${Renderive_Web_node_search_paths} REQUIRED)
else ()
find_program(Renderive_Web_npm_executable NAMES npm REQUIRED)
endif ()
set(Renderive_Web_frontend_dir "${CMAKE_CURRENT_LIST_DIR}/../webapp_gallery")
set(Renderive_Web_frontend_install_stamp "${CMAKE_CURRENT_BINARY_DIR}/webapp_gallery_npm_ci.stamp")
set(Renderive_Web_frontend_build_stamp "${CMAKE_CURRENT_BINARY_DIR}/webapp_gallery_vite_build.stamp")
file(GLOB_RECURSE Renderive_Web_frontend_sources CONFIGURE_DEPENDS
"${Renderive_Web_frontend_dir}/src/*"
)
set(Renderive_Web_frontend_configuration
"${Renderive_Web_frontend_dir}/package.json"
"${Renderive_Web_frontend_dir}/package-lock.json"
"${Renderive_Web_frontend_dir}/vite.config.ts"
"${Renderive_Web_frontend_dir}/tsconfig.json"
"${Renderive_Web_frontend_dir}/tsconfig.app.json"
"${Renderive_Web_frontend_dir}/index.html"
)
add_custom_command(
OUTPUT "${Renderive_Web_frontend_install_stamp}"
COMMAND "${Renderive_Web_npm_executable}" ci
COMMAND "${CMAKE_COMMAND}" -E touch "${Renderive_Web_frontend_install_stamp}"
DEPENDS
"${Renderive_Web_frontend_dir}/package.json"
"${Renderive_Web_frontend_dir}/package-lock.json"
WORKING_DIRECTORY "${Renderive_Web_frontend_dir}"
COMMENT "Installing Renderive Gallery frontend dependencies"
VERBATIM
)
add_custom_command(
OUTPUT "${Renderive_Web_frontend_build_stamp}"
COMMAND "${Renderive_Web_npm_executable}" run build
COMMAND "${CMAKE_COMMAND}" -E touch "${Renderive_Web_frontend_build_stamp}"
DEPENDS "${Renderive_Web_frontend_install_stamp}"
${Renderive_Web_frontend_configuration}
${Renderive_Web_frontend_sources}
WORKING_DIRECTORY "${Renderive_Web_frontend_dir}"
COMMENT "Building Renderive Gallery frontend"
VERBATIM
)
add_custom_target(Renderive_Web_Assets
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${Renderive_Web_assets_dir}"
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${Renderive_Web_frontend_dir}/dist"
"${Renderive_Web_assets_dir}"
DEPENDS "${Renderive_Web_frontend_build_stamp}"
COMMENT "Synchronizing Renderive Gallery frontend assets"
VERBATIM
)
library_is_installed_with_rely(Renderive_Web_dependencies_installed ${Renderive_Web_dependencies})
if (NOT Renderive_Web_dependencies_installed)
rcl_log_append("[FATAL_ERROR] Renderive_Web dependencies are not installed. Build Renderive_Web_env first")
@@ -54,17 +124,6 @@ append_glob_source(Renderive_Web_Server_sources "${Renderive_Web_Server_source_d
add_executable(Renderive_Web_Server ${Renderive_Web_Server_sources})
target_compile_features(Renderive_Web_Server PRIVATE cxx_std_20)
target_link_libraries(Renderive_Web_Server PRIVATE Renderive_Web)
if (CMAKE_CONFIGURATION_TYPES)
set(Renderive_Web_assets_dir "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/webapp_gallery")
else ()
set(Renderive_Web_assets_dir "${CMAKE_CURRENT_BINARY_DIR}/webapp_gallery")
endif ()
add_custom_target(Renderive_Web_Assets
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${CMAKE_CURRENT_LIST_DIR}/../webapp_gallery"
"${Renderive_Web_assets_dir}"
COMMENT "Synchronizing Renderive Web assets"
)
add_dependencies(Renderive_Web_Server Renderive_Web_Assets)
if (MSVC)
target_compile_options(Renderive_Web PRIVATE /utf-8)