Object.keys(components).forEach

本文介绍了一种使用Node.js遍历指定目录下所有子目录的方法,并收集这些子目录中特定配置文件的路径。
Object.keys(components).forEach(key => {
  const filePath = path.join(__dirname, `../../packages/${key}/cooking.conf.js`);

  if (existsSync(filePath)) {
    componentPaths.push(`packages/${key}/cooking.conf.js`);
  }
});


export { default as activeRingChart } from './components/activeRingChart/index' export { default as borderBox1 } from './components/borderBox1/index' export { default as borderBox10 } from './components/borderBox10/index' export { default as borderBox11 } from './components/borderBox11/index' export { default as borderBox12 } from './components/borderBox12/index' export { default as borderBox13 } from './components/borderBox13/index' export { default as borderBox2 } from './components/borderBox2/index' export { default as borderBox3 } from './components/borderBox3/index' export { default as borderBox4 } from './components/borderBox4/index' export { default as borderBox5 } from './components/borderBox5/index' export { default as borderBox6 } from './components/borderBox6/index' export { default as borderBox7 } from './components/borderBox7/index' export { default as borderBox8 } from './components/borderBox8/index' export { default as borderBox9 } from './components/borderBox9/index' export { default as capsuleChart } from './components/capsuleChart/index' export { default as charts } from './components/charts/index' export { default as conicalColumnChart } from './components/conicalColumnChart/index' export { default as decoration1 } from './components/decoration1/index' export { default as decoration10 } from './components/decoration10/index' export { default as decoration11 } from './components/decoration11/index' export { default as decoration12 } from './components/decoration12/index' export { default as decoration2 } from './components/decoration2/index' export { default as decoration3 } from './components/decoration3/index' export { default as decoration4 } from './components/decoration4/index' export { default as decoration5 } from './components/decoration5/index' export { default as decoration6 } from './components/decoration6/index' export { default as decoration7 } from './components/decoration7/index' export { default as decoration8 } from './components/decoration8/index' export { default as decoration9 } from './components/decoration9/index' export { default as digitalFlop } from './components/digitalFlop/index' export { default as flylineChart } from './components/flylineChart/index' export { default as flylineChartEnhanced } from './components/flylineChartEnhanced/index' export { default as fullScreenContainer } from './components/fullScreenContainer/index' export { default as loading } from './components/loading/index' export { default as percentPond } from './components/percentPond/index' export { default as scrollBoard } from './components/scrollBoard/index' export { default as scrollRankingBoard } from './components/scrollRankingBoard/index' export { default as waterLevelPond } from './components/waterLevelPond/index' /** * IMPORT COMPONENTS */ import fullScreenContainer from './components/fullScreenContainer/index' import loading from './components/loading/index' // border box import borderBox1 from './components/borderBox1/index' import borderBox2 from './components/borderBox2/index' import borderBox3 from './components/borderBox3/index' import borderBox4 from './components/borderBox4/index' import borderBox5 from './components/borderBox5/index' import borderBox6 from './components/borderBox6/index' import borderBox7 from './components/borderBox7/index' import borderBox8 from './components/borderBox8/index' import borderBox9 from './components/borderBox9/index' import borderBox10 from './components/borderBox10/index' import borderBox11 from './components/borderBox11/index' import borderBox12 from './components/borderBox12/index' import borderBox13 from './components/borderBox13/index' // decoration import decoration1 from './components/decoration1/index' import decoration2 from './components/decoration2/index' import decoration3 from './components/decoration3/index' import decoration4 from './components/decoration4/index' import decoration5 from './components/decoration5/index' import decoration6 from './components/decoration6/index' import decoration7 from './components/decoration7/index' import decoration8 from './components/decoration8/index' import decoration9 from './components/decoration9/index' import decoration10 from './components/decoration10/index' import decoration11 from './components/decoration11/index' import decoration12 from './components/decoration12/index' // charts import charts from './components/charts/index' import activeRingChart from './components/activeRingChart' import capsuleChart from './components/capsuleChart' import waterLevelPond from './components/waterLevelPond/index' import percentPond from './components/percentPond/index' import flylineChart from './components/flylineChart' import flylineChartEnhanced from './components/flylineChartEnhanced' import conicalColumnChart from './components/conicalColumnChart' import digitalFlop from './components/digitalFlop' import scrollBoard from './components/scrollBoard/index' import scrollRankingBoard from './components/scrollRankingBoard/index' /** * USE COMPONENTS */ export default function (Vue) { Vue.use(fullScreenContainer) Vue.use(loading) // border box Vue.use(borderBox1) Vue.use(borderBox2) Vue.use(borderBox3) Vue.use(borderBox4) Vue.use(borderBox5) Vue.use(borderBox6) Vue.use(borderBox7) Vue.use(borderBox8) Vue.use(borderBox9) Vue.use(borderBox10) Vue.use(borderBox11) Vue.use(borderBox12) Vue.use(borderBox13) // decoration Vue.use(decoration1) Vue.use(decoration2) Vue.use(decoration3) Vue.use(decoration4) Vue.use(decoration5) Vue.use(decoration6) Vue.use(decoration7) Vue.use(decoration8) Vue.use(decoration9) Vue.use(decoration10) Vue.use(decoration11) Vue.use(decoration12) // charts Vue.use(charts) Vue.use(activeRingChart) Vue.use(capsuleChart) Vue.use(waterLevelPond) Vue.use(percentPond) Vue.use(flylineChart) Vue.use(flylineChartEnhanced) Vue.use(conicalColumnChart) Vue.use(digitalFlop) Vue.use(scrollBoard) Vue.use(scrollRankingBoard) }
07-17
下面代码中,注释的部分是我之间创建地图的方法,可以正常创建地图,未注释的部分是按照上面封装的方法,前者地图正常加载,封装后地图不正常创建了,咋回事,没报错,但是地图容器canvas没有创建,代码如下: import Map from "../../../components/sdk/extendArcgis/index"; import { useEffect, useRef } from "react"; import DynamicArcGISMap from "../../../components/mapManager/ArcGISMap"; export const MapView = () => { // const mapDiv = useRef<HTMLDivElement>(null); // useEffect(() => { // // 确保容器元素存在 // if (!mapDiv.current) { // return; // } // const map = new Map.CreateMap({ // container: mapDiv.current, // center: [116.397428, 39.90923], // zoom: 10, // scale: 577791, // }); // console.log(map); // return () => { // // 销毁地图和视图,防止内存泄漏 // map.appConfig.activeView.destroy(); // map.appConfig.map.destroy(); // console.log("Map resources cleaned up."); // }; // }, []); // return ( // <> // <div ref={mapDiv} style={{ height: "100%", width: "100%" }}></div> // </> // ); return ( <div> <DynamicArcGISMap mapId="main-map" options={{ center: [116.397428, 39.90923], scale: 577791 }} /> </div> ); }; 然后下面封装的代码我也都展示出来如下: // components/DynamicArcGISMap.tsx import { useRef, useEffect } from "react"; import { mapManager } from "./mapManager"; import type { DynamicArcGISMapProps } from "./ArcGISMapProps"; const DynamicArcGISMap: React.FC<DynamicArcGISMapProps> = ({ mapId, style = { width: "100%", height: "100%" }, options, onCreated, onDestroy, }) => { const containerRef = useRef<HTMLDivElement>(null); useEffect(() => { const container = containerRef.current; if (!container) return; options.container = containerRef.current; // 创建地图(唯一 id) console.log("options", options); const { mapObject } = mapManager.createMap(mapId, options); console.log("mapObject", mapObject); onCreated?.(mapObject); // 清理时销毁地图 return () => { mapManager.destroyMap(mapId); onDestroy?.(); }; }, [mapId]); // 注意:依赖 mapId,切换 id 会重建地图 return ( <> <div ref={containerRef} style={style} /> </> ); }; export default DynamicArcGISMap; // services/MapManager.ts import MapInit from "../sdk/extendArcgis/index"; interface MapInstance { mapObject: any; } interface mapOptions { [key: string]: any; } class MapManager { private instances = new Map<string, MapInstance>(); // 创建新地图 createMap(mapId: string, options: mapOptions) { if (this.instances.has(mapId)) { console.warn(`Map with id "${mapId}" already exists. Destroy it first.`); return this.instances.get(mapId)!; } console.log(mapId, options); const mapObject = new MapInit.CreateMap(options); const instance = { mapObject }; this.instances.set(options.id, instance); return instance; } // 获取已有地图 getMap(id: string) { return this.instances.get(id) || null; } // 销毁地图 destroyMap(id: string) { const instance = this.instances.get(id); if (instance) { instance.mapObject.appConfig.activeView.destroy(); instance.mapObject.appConfig.map.destroy(); this.instances.delete(id); } } // 获取所有地图 ID getIds() { return Array.from(this.instances.keys()); } // 清空所有(慎用) destroyAll() { this.instances.forEach((inst) => inst.mapObject.appConfig.activeView.destroy()); this.instances.clear(); } } // 单例导出 export const mapManager = new MapManager(); export type { MapInstance };
最新发布
12-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值