Browse Source

feat: sorted out hmr disposal of objects

alvarosabu 2 years ago
parent
commit
42fa6e767e

+ 18 - 7
.vscode/launch.json

@@ -3,15 +3,26 @@
   "version": "0.2.0",
   "version": "0.2.0",
   "configurations": [
   "configurations": [
     {
     {
+      "name": "Attach by Process ID",
+      "processId": "${command:PickProcess}",
+      "request": "attach",
+      "skipFiles": ["<node_internals>/**"],
+      "type": "node"
+    },
+    {
+      "name": "Attach to vite",
+      "port": 5174,
+      "request": "attach",
+      "skipFiles": ["<node_internals>/**"],
+      "type": "node"
+    },
+    {
+      "name": "fe-server",
       "type": "node",
       "type": "node",
       "request": "launch",
       "request": "launch",
-      "name": "Debug Current Test File",
-      "autoAttachChildProcesses": true,
-      "skipFiles": ["<node_internals>/**", "**/node_modules/**"],
-      "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs",
-      "args": ["run", "${relativeFile}"],
-      "smartStep": true,
-      "console": "integratedTerminal"
+      "cwd": "${workspaceRoot}/packages/tres",
+      "runtimeExecutable": "npm",
+      "runtimeArgs": ["run", "dev", "--preserve-symlinks"]
     }
     }
   ]
   ]
 }
 }

+ 6 - 5
packages/tres/package.json

@@ -41,15 +41,14 @@
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
   },
   },
   "peerDependencies": {
   "peerDependencies": {
-    "vue": "^3.2.47",
-    "three": "latest"
+    "three": "latest",
+    "vue": "^3.2.47"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@vueuse/core": "^9.12.0",
-    "@alvarosabu/utils": "^2.2.0"
+    "@alvarosabu/utils": "^2.2.0",
+    "@vueuse/core": "^9.12.0"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "three": "latest",
     "@tresjs/cientos": "workspace:^1.6.0",
     "@tresjs/cientos": "workspace:^1.6.0",
     "@types/three": "latest",
     "@types/three": "latest",
     "@vitejs/plugin-vue": "^4.0.0",
     "@vitejs/plugin-vue": "^4.0.0",
@@ -62,11 +61,13 @@
     "release-it": "^15.6.0",
     "release-it": "^15.6.0",
     "rollup-plugin-analyzer": "^4.0.0",
     "rollup-plugin-analyzer": "^4.0.0",
     "rollup-plugin-visualizer": "^5.9.0",
     "rollup-plugin-visualizer": "^5.9.0",
+    "three": "latest",
     "unplugin-vue-components": "^0.23.0",
     "unplugin-vue-components": "^0.23.0",
     "vite": "^4.1.1",
     "vite": "^4.1.1",
     "vite-plugin-banner": "^0.7.0",
     "vite-plugin-banner": "^0.7.0",
     "vite-plugin-dts": "^1.7.2",
     "vite-plugin-dts": "^1.7.2",
     "vite-plugin-glsl": "^1.1.2",
     "vite-plugin-glsl": "^1.1.2",
+    "vite-plugin-inspect": "^0.7.15",
     "vite-plugin-require-transform": "^1.0.9",
     "vite-plugin-require-transform": "^1.0.9",
     "vitest": "^0.28.4",
     "vitest": "^0.28.4",
     "vue-demi": "^0.13.11"
     "vue-demi": "^0.13.11"

+ 2 - 7
packages/tres/src/core/useInstanceCreator/index.ts

@@ -1,15 +1,14 @@
 /* eslint-disable new-cap */
 /* eslint-disable new-cap */
 /* eslint-disable @typescript-eslint/no-empty-function */
 /* eslint-disable @typescript-eslint/no-empty-function */
-import { BufferAttribute, FogBase, OrthographicCamera, PerspectiveCamera, Raycaster, Scene } from 'three'
+import { BufferAttribute, FogBase, OrthographicCamera, PerspectiveCamera } from 'three'
 import { defineComponent, inject, onUnmounted, Ref } from 'vue'
 import { defineComponent, inject, onUnmounted, Ref } from 'vue'
 import { useEventListener } from '@vueuse/core'
 import { useEventListener } from '@vueuse/core'
 
 
 import { isArray, isDefined, isFunction } from '@alvarosabu/utils'
 import { isArray, isDefined, isFunction } from '@alvarosabu/utils'
 import { normalizeVectorFlexibleParam } from '/@/utils/normalize'
 import { normalizeVectorFlexibleParam } from '/@/utils/normalize'
-import { useCamera, useCatalogue, useRenderLoop, useScene, useTres } from '/@/core/'
+import { useCamera, useCatalogue, useRenderLoop, useTres } from '/@/core/'
 import { useLogger } from '/@/composables'
 import { useLogger } from '/@/composables'
 import { TresAttributes, TresCatalogue, TresInstance, TresVNode, TresVNodeType, TresEvent } from '/@/types'
 import { TresAttributes, TresCatalogue, TresInstance, TresVNode, TresVNodeType, TresEvent } from '/@/types'
-import { useRaycaster } from '../useRaycaster'
 
 
 const VECTOR3_PROPS = ['rotation', 'scale', 'position']
 const VECTOR3_PROPS = ['rotation', 'scale', 'position']
 
 
@@ -218,10 +217,6 @@ export function useInstanceCreator(prefix: string) {
               }
               }
 
 
               if (import.meta.hot) {
               if (import.meta.hot) {
-                import.meta.hot.on('vite:beforeUpdate', () => {
-                  scene?.remove(instance)
-                })
-
                 import.meta.hot.on('vite:afterUpdate', () => {
                 import.meta.hot.on('vite:afterUpdate', () => {
                   instance = createInstance(threeObj, attrs, slots)
                   instance = createInstance(threeObj, attrs, slots)
                   processProps(attrs, instance)
                   processProps(attrs, instance)

+ 6 - 0
packages/tres/src/core/useScene/component.ts

@@ -26,6 +26,12 @@ export const Scene = defineComponent({
       }
       }
     })
     })
 
 
+    if (import.meta.hot) {
+      import.meta.hot.on('vite:afterUpdate', () => {
+        scene.value.children = []
+      })
+    }
+
     return () => {
     return () => {
       if (slots.default) {
       if (slots.default) {
         return slots.default()
         return slots.default()

+ 6 - 1
packages/tres/vite.config.ts

@@ -4,6 +4,8 @@ import { defineConfig } from 'vite'
 
 
 import vue from '@vitejs/plugin-vue'
 import vue from '@vitejs/plugin-vue'
 import banner from 'vite-plugin-banner'
 import banner from 'vite-plugin-banner'
+import Inspect from 'vite-plugin-inspect'
+
 import dts from 'vite-plugin-dts'
 import dts from 'vite-plugin-dts'
 import analyze from 'rollup-plugin-analyzer'
 import analyze from 'rollup-plugin-analyzer'
 /* import { visualizer } from 'rollup-plugin-visualizer' */
 /* import { visualizer } from 'rollup-plugin-visualizer' */
@@ -27,7 +29,9 @@ export default defineConfig({
     dedupe: ['@tresjs/cientos'],
     dedupe: ['@tresjs/cientos'],
   },
   },
   plugins: [
   plugins: [
-    vue({}),
+    vue({
+      isProduction: false,
+    }),
     dts({
     dts({
       insertTypesEntry: true,
       insertTypesEntry: true,
     }),
     }),
@@ -36,6 +40,7 @@ export default defineConfig({
         pkg.version
         pkg.version
       }\n * (c) ${new Date().getFullYear()}\n * description: ${pkg.description}\n * author: ${pkg.author}\n */`,
       }\n * (c) ${new Date().getFullYear()}\n * description: ${pkg.description}\n * author: ${pkg.author}\n */`,
     }),
     }),
+    Inspect(),
   ],
   ],
   test: {
   test: {
     environment: 'happy-dom',
     environment: 'happy-dom',

+ 32 - 2
pnpm-lock.yaml

@@ -98,13 +98,13 @@ importers:
       vite-plugin-banner: ^0.7.0
       vite-plugin-banner: ^0.7.0
       vite-plugin-dts: ^1.7.2
       vite-plugin-dts: ^1.7.2
       vite-plugin-glsl: ^1.1.2
       vite-plugin-glsl: ^1.1.2
+      vite-plugin-inspect: ^0.7.15
       vite-plugin-require-transform: ^1.0.9
       vite-plugin-require-transform: ^1.0.9
       vitest: ^0.28.4
       vitest: ^0.28.4
       vue-demi: ^0.13.11
       vue-demi: ^0.13.11
     dependencies:
     dependencies:
       '@alvarosabu/utils': 2.3.0
       '@alvarosabu/utils': 2.3.0
       '@vueuse/core': 9.12.0
       '@vueuse/core': 9.12.0
-      three: 0.149.0
     devDependencies:
     devDependencies:
       '@tresjs/cientos': link:../cientos
       '@tresjs/cientos': link:../cientos
       '@types/three': 0.149.0
       '@types/three': 0.149.0
@@ -118,11 +118,13 @@ importers:
       release-it: 15.6.0
       release-it: 15.6.0
       rollup-plugin-analyzer: 4.0.0
       rollup-plugin-analyzer: 4.0.0
       rollup-plugin-visualizer: 5.9.0
       rollup-plugin-visualizer: 5.9.0
+      three: 0.149.0
       unplugin-vue-components: 0.23.0
       unplugin-vue-components: 0.23.0
       vite: 4.1.1
       vite: 4.1.1
       vite-plugin-banner: 0.7.0
       vite-plugin-banner: 0.7.0
       vite-plugin-dts: 1.7.3_vite@4.1.1
       vite-plugin-dts: 1.7.3_vite@4.1.1
       vite-plugin-glsl: 1.1.2_vite@4.1.1
       vite-plugin-glsl: 1.1.2_vite@4.1.1
+      vite-plugin-inspect: 0.7.15_vite@4.1.1
       vite-plugin-require-transform: 1.0.9
       vite-plugin-require-transform: 1.0.9
       vitest: 0.28.5_mbkmnifaqmtsef2wnoeptjqqgq
       vitest: 0.28.5_mbkmnifaqmtsef2wnoeptjqqgq
       vue-demi: 0.13.11
       vue-demi: 0.13.11
@@ -3841,6 +3843,15 @@ packages:
       universalify: 2.0.0
       universalify: 2.0.0
     dev: true
     dev: true
 
 
+  /fs-extra/11.1.0:
+    resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
+    engines: {node: '>=14.14'}
+    dependencies:
+      graceful-fs: 4.2.10
+      jsonfile: 6.1.0
+      universalify: 2.0.0
+    dev: true
+
   /fs-extra/7.0.1:
   /fs-extra/7.0.1:
     resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
     resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
     engines: {node: '>=6 <7 || >=8'}
     engines: {node: '>=6 <7 || >=8'}
@@ -7035,7 +7046,7 @@ packages:
 
 
   /three/0.149.0:
   /three/0.149.0:
     resolution: {integrity: sha512-tohpUxPDht0qExRLDTM8sjRLc5d9STURNrdnK3w9A+V4pxaTBfKWWT/IqtiLfg23Vfc3Z+ImNfvRw1/0CtxrkQ==}
     resolution: {integrity: sha512-tohpUxPDht0qExRLDTM8sjRLc5d9STURNrdnK3w9A+V4pxaTBfKWWT/IqtiLfg23Vfc3Z+ImNfvRw1/0CtxrkQ==}
-    dev: false
+    dev: true
 
 
   /through/2.3.8:
   /through/2.3.8:
     resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
     resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
@@ -7568,6 +7579,25 @@ packages:
       - rollup
       - rollup
     dev: true
     dev: true
 
 
+  /vite-plugin-inspect/0.7.15_vite@4.1.1:
+    resolution: {integrity: sha512-oxeZCljacA/slhGFbDNlBqdhDU9fgdHL84i7Nz7DnaAIE7DhTiW2djanw3d/BKuZtduKUY82vRUQ4iaG917t2A==}
+    engines: {node: '>=14'}
+    peerDependencies:
+      vite: ^3.1.0 || ^4.0.0
+    dependencies:
+      '@antfu/utils': 0.7.2
+      '@rollup/pluginutils': 5.0.2
+      debug: 4.3.4
+      fs-extra: 11.1.0
+      kolorist: 1.7.0
+      sirv: 2.0.2
+      ufo: 1.0.1
+      vite: 4.1.1
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+    dev: true
+
   /vite-plugin-require-transform/1.0.9:
   /vite-plugin-require-transform/1.0.9:
     resolution: {integrity: sha512-aO1TC5jL2u4TjuWbtWRE4N46/nWppe2FQQDt4GkKMfj3XQ1NApaYVUC6eDs4UvOaU/kexCKXqGs63dgaWIkI9w==}
     resolution: {integrity: sha512-aO1TC5jL2u4TjuWbtWRE4N46/nWppe2FQQDt4GkKMfj3XQ1NApaYVUC6eDs4UvOaU/kexCKXqGs63dgaWIkI9w==}
     dependencies:
     dependencies: