@@ -20,75 +20,8 @@ const excludedPaths = [
2020 path . join ( docsDirectory , 'Robotics' , 'Robot_Kits' , 'ReachyMini' ) , // 排除 ReachyMini 目录
2121
2222 // 排除指定文档
23- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'T1000-E' , 'sensecap_t1000_e.md' ) , //10.29
24- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'Wio_Tracker_L1' , 'get_started_with_wio_tracker_l1.md' ) , //10.29
25- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'Wio_Tracker_L1' , 'wio_tracker_node.md' ) , //11.5
26- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'XIAO_ESP32S3_&_SX1262_Kit' , 'Get_Started_meshtastic.md' ) , //11.5
27- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_ONE_Weather_Station' , 'SenseCAP_ONE_Compact_Weather_Station' , 'Introduction.md' ) , //11.12
28- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'wio_tracker_kit' , 'flash_meshtastic_kit.md' ) , //11.11
29- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'Solar_Node' , 'get_started_with_solar_node.md' ) , //11.11
30- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_ONE_Weather_Station' , 'SenseCAP_ONE_Compact_Weather_Station' , 'Tutorials-Getting_Started_with_SenseCAP_ONE_Compact_Weather_Sensor.md' ) , //11.25
31- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'XIAO_ESP32S3_&_SX1262_Kit' , 'nrf52840_1262.md' ) , //11.24
32- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_Watcher' , 'Applications' , 'SenseCAP_Watcher_for_Xiaozhi_AI' , 'Face_Regonition_with_MCP.md' ) , //11.24
33- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'LoRaWAN_Tracker' , 'get_started_with_lorawan_tracker.md' ) , //11.26
34- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_LoRaWAN_Sensor' , 'SenseCAP_A1102' , 'DeployAI_With_A1102.md' ) , //11.26
35- path . join ( docsDirectory , 'Sensor' , 'ePaper' , 'XIAO_ePaper_Display_Board_EN04' , 'EN04_GettingStart.md' ) , //11.25
36- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_T2000_Tracker' , 'SenseCAP_T2000_intro.md' ) , //12.1
37- path . join ( docsDirectory , 'Robotics' , 'Robot_Actuator' , 'HighTorque' , 'HighTorque_Getting_Started.md' ) , //12.4
38- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_Watcher' , 'Applications' , 'SenseCAP_Watcher_for_Xiaozhi_AI' , 'Flash_Watcher_Agent_Firmware.md' ) , //12.4
39- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_Watcher' , 'Applications' , 'SenseCAP_Watcher_for_Xiaozhi_AI' , 'Visual_Trigger_and_AI_Flash.md' ) , //12.4
40- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_T2000_Tracker' , 'SenseCAP_T2000_Tracker_Introduction.md' ) , //12.1
41- path . join ( docsDirectory , 'Robotics' , 'Robot_Kits' , 'StackForce' , 'StackForce_Giant_Bipedal_Wheeled_Robot.md' ) , //12.12
42- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'meshtastic_intro.md' ) , //12.11
43- path . join ( docsDirectory , 'Network' , 'Meshtastic_Network' , 'Solar_Node' , 'solar_node.md' ) , //12.16
44- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_ESP32C5' , 'Application' , 'XIAO_ESP32C5_ESP-Mesh_Audio.md' ) , //12.12
45- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_T1000_Tracker' , 'User_Guide' , 'Get_Started.md' ) , //12.24
46- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Accessories' , 'Display' , 'Grove-OLED_Display_0.96inch.md' ) , //12.29
47- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Sensors' , 'All_in_one' , 'Grove-CO2_Temperature_Humidity_Sensor-SCD30.md' ) , //12.29
48- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Sensors' , 'Light' , 'Grove-I2C_Color_Sensor.md' ) , //12.29
49- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Sensors' , 'Temp&Humi' , 'Grove-AHT20-I2C-Industrial-Grade-Temperature&Humidity-Sensor.md' ) , //12.29
50- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Sensors' , 'Temp&Humi' , 'Grove-TempAndHumi_Sensor-SHT31.md' ) , //12.29
51- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Sensors' , 'Temp&Humi' , 'Grove-Temperature-Humidity-Sensor-DH20.md' ) , //12.29
52- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Sensors' , 'Temp&Humi' , 'Grove-TemperatureAndHumidity_Sensor.md' ) , //12.29
53- path . join ( docsDirectory , 'Sensor' , 'Grove' , 'Grove_Sensors' , 'Temp&Humi' , 'Grove-Temperature_and_Humidity_Sensor_Pro.md' ) , //12.29
54- path . join ( docsDirectory , 'Top_Brand' , 'Raspberry_Pi' , 'Pi_HAT' , 'Grove_Base_Hat_for_Raspberry_Pi.md' ) , //12.29
55- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_LoRaWAN_Sensor' , 'SenseCAP_S2120_8-in-1_LoRaWAN_Weather_Sensor' , 'SenseCAP_S2120_8-in-1_LoRaWAN_Weather_Sensor_Introduction.md' ) , //12.29
56- path . join ( docsDirectory , 'Edge' , 'NVIDIA_Jetson' , 'FAQs' , 'Make_DIY_BSP_for_Jetson.md' ) , //1.4
57- path . join ( docsDirectory , 'Network' , 'SenseCAP_Network' , 'reComputer_R1225_LoRaWAN_Gateway' , 'R1225_introduction.md' ) , //1.4
58- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_LoRaWAN_Sensor' , 'SenseCAP_A1102' , 'SettingAI_With_A1102.md' ) , //12.31
59- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_ESP32C5' , 'Wireless_Connection' , 'XIAO_ESP32C5_WiFi_Usage.md' ) , //12.30
60- path . join ( docsDirectory , 'Sensor' , 'ePaper' , 'epaper_driver_board_main_page.md' ) , //12.21
61- path . join ( docsDirectory , 'Edge' , 'NVIDIA_Jetson' , 'FAQs' , 'How_to_Deal_the_Issue_of_UUID_error.md' ) , //1.8
62- path . join ( docsDirectory , 'Network' , 'SenseCAP_Network' , 'SenseCAP_Gateway_Intro.md' ) , //1.8
63- path . join ( docsDirectory , 'Cloud_Chain' , 'SenseCraft_APP' , 'overview.md' ) , //1.8
64- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_T2000_Tracker' , 'Integrated_with_LoRaWAN_Network_Server' , 'Connect_to_The_Things_Network.md' ) , //1.6
65- path . join ( docsDirectory , 'Network' , 'LoRa_Wio_Series' , 'Wio-E5' , 'LoRa_E5_mini.md' ) , //1.15
66- path . join ( docsDirectory , 'Sensor' , 'ePaper' , 'XIAO_ePaper_Display_Board_EN04' , 'Application' , 'OpenEpaperLink_GettingStart.md' ) , //1.13
67- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_ESP32C5' , 'Zigbee' , 'XIAO_ESP32C5_Zigbee_arduino.md' ) , //1.9
68- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_ESP32C5' , 'Zigbee' , 'XIAO_ESP32C5_Zigbee_homeassistant.md' ) , //1.9
69- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_ESP32C5' , 'Zigbee' , 'XIAO_ESP32C5_Zigbee_idf.md' ) , //1.9
70- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_ESP32C5' , 'Application' , 'XIAO_ESP32C5_WiFi_Throughput_tester.md' ) , //1.16
71- path . join ( docsDirectory , 'Robotics' , 'Robot_Kits' , 'Lerobot' , 'Lerobot_SO_ARM101_DAMO.md' ) , //1.12
72- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_Decoder.md' ) , //1.26
73- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_T2000_Tracker' , 'Integrated_with_LoRaWAN_Network_Server' , 'Connect_to_AWS_IoT_Core.md' ) , //1.23
74- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_T2000_Tracker' , 'Integrated_with_LoRaWAN_Network_Server' , 'Connect_to_Helium.md' ) , //1.23
75- path . join ( docsDirectory , 'Sensor' , 'ReSpeaker_2-Mics_Pi_HAT' , 'v1-deprecated' , 'ReSpeaker_2_Mics_Pi_HAT_Raspberry.md' ) , //1.29
76- path . join ( docsDirectory , 'Sensor' , 'ReSpeaker_2-Mics_Pi_HAT' , 'v2' , 'ReSpeaker_2_Mics_Pi_HAT_Raspberry_v2.md' ) , //1.29
77- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_nRF54L15-Sense' , 'XIAO_nRF54L15-Sense_Zigbee.md' ) , //1.27
78- path . join ( docsDirectory , 'Sensor' , 'ReSpeaker_Lite' , 'Application' , 'respeaker_lite_ha.md' ) , //2.6
79- path . join ( docsDirectory , 'Sensor' , 'SeeedStudio_XIAO' , 'SeeedStudio_XIAO_Series_Projects.md' ) , //2.4
80- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'LoRaWAN_Tracker' , 'introduction.md' ) , //2.4
81- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'LoRaWAN_Tracker' , 'Open_Source_FW' , 'lorawan_tracker_with_ses.md' ) , //2.4
82- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'LoRaWAN_Tracker' , 'Open_Source_FW' , 't1000_e_arduino_examples.md' ) , //2.4
83- path . join ( docsDirectory , 'Edge' , 'NVIDIA_Jetson' , 'Application' , 'Generative_AI' , 'Local_OpenClaw(Clawdbot)_on_reComputer_Jetson.md' ) , //2.3
84- path . join ( docsDirectory , 'Sensor' , 'reSpeaker_XVF3800_USB_4_Mic_Array' , 'respeaker_xvf_3800_agora_ten_framework.md' ) , //2.9
85- path . join ( docsDirectory , 'Sensor' , 'reSpeaker_XVF3800_USB_4_Mic_Array' , 'respeaker_xvf_3800_openclaw.md' ) , //2.10
86- path . join ( docsDirectory , 'Sensor' , 'reSpeaker_XVF3800_USB_4_Mic_Array' , 'respeaker_xvf_3800_arm.md' ) , //2.6
87- path . join ( docsDirectory , 'Sensor' , 'reSpeaker_XVF3800_USB_4_Mic_Array' , 'ReSpeaker.md' ) , //2.26
88- path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_T1000_Tracker' , 'FAQ.md' ) , //2.14
89- path . join ( docsDirectory , 'Edge' , 'Raspberry_Pi_Devices' , 'Edge_AI_Computer' , 'reComputer_Industrial_R22xx' , 'reComputer_Industrial_R22xx_assembly_guide.md' ) , //2.9
90- path . join ( docsDirectory , 'Edge' , 'Raspberry_Pi_Devices' , 'Edge_AI_Computer' , 'reComputer_Industrial_R22xx' , 'reComputer_Industrial_R22xx_configure_system.md' ) , //2.9
91- path . join ( docsDirectory , 'Edge' , 'Raspberry_Pi_Devices' , 'Edge_AI_Computer' , 'reComputer_Industrial_R22xx' , 'reComputer_Industrial_R22xx_flash_os.md' ) , //2.9
23+ path . join ( docsDirectory , 'Edge' , 'NVIDIA_Jetson' , 'reComputer_Jetson_Series' , 'reComputer_Rugged_J40' , 'reComputer_Rugged_J40_Getting_Started.md' ) , //3.4
24+ path . join ( docsDirectory , 'Sensor' , 'SenseCAP' , 'SenseCAP_Watcher' , 'Applications' , 'SenseCAP_Watcher_for_Xiaozhi_AI' , '_Flash_Watcher_Agent_Firmware.md' ) , //3.4
9225] ;
9326
9427// 语言目录/文件名前缀映射(语言 docs 在 sites/<lang>/docs 下)
@@ -117,6 +50,23 @@ function tryReadTitle(absFile) {
11750 }
11851}
11952
53+ // 提取文档时间:优先 createdAt,没有则回退到 last_update.date
54+ function extractDocDate ( data ) {
55+ if ( data . createdAt && ! isNaN ( new Date ( data . createdAt ) . getTime ( ) ) ) {
56+ return data . createdAt ;
57+ }
58+
59+ if (
60+ data . last_update &&
61+ data . last_update . date &&
62+ ! isNaN ( new Date ( data . last_update . date ) . getTime ( ) )
63+ ) {
64+ return data . last_update . date ;
65+ }
66+
67+ return null ;
68+ }
69+
12070// 扫描英文文档
12171function processDirectory ( directory ) {
12272 if ( excludedPaths . includes ( directory ) ) return ;
@@ -138,14 +88,15 @@ function processDirectory(directory) {
13888 relPath = relPath . replace ( / \. m d $ / i, '' ) ; // 去掉 .md
13989
14090 const slug = data . slug || relPath ;
91+ const docDate = extractDocDate ( data ) ;
14192
142- if ( data . last_update && data . last_update . date ) {
93+ if ( docDate ) {
14394 docList . push ( {
14495 path : slug . startsWith ( '/' ) ? slug : `/${ slug } ` ,
14596 relPath,
14697 image : data . image || '' ,
14798 title,
148- date : data . last_update . date ,
99+ date : docDate ,
149100 } ) ;
150101 }
151102 }
0 commit comments