Vianmääritysoppaat
Tämä sivu kattaa yleisimmät virheet, joita esiintyy käytettäessä @aspose/3d TypeScript- ja Node.js-projekteissa, perimmäisten syiden selityksineen ja vahvistettuine korjauksineen.
Moduuliratkaisuvirheet
Error: Cannot find module '@aspose/3d/formats/obj'
Perimmäinen syy: TypeScriptin moduuliratkaisustrategia ei tue Node.js-tyylisiä alipolkuvientiä (exports tiedostossa package.json) ellei moduleResolution on asetettu arvoon node tai node16.
Korjaus: Aseta moduleResolution arvoon "node" tiedostossasi tsconfig.json:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"strict": true
}
}Jos käytät TypeScript 5.x:n kanssa "module": "node16" tai "module": "nodenext", käytä "moduleResolution": "node16" yhtenäistämiseksi.
SyntaxError: Cannot use import statement in a module
Perimmäinen syy: Käännettyä JavaScriptiä ajetaan käyttäen require() semantiikkaa, mutta tuloste sisältää ES module import syntaksia; tämä tapahtuu kun module on asetettu es2020 tai esnext mutta Node.js-ajoympäristö odottaa CommonJS:ää.
Korjaa: Käytä "module": "commonjs" kohteessa tsconfig.json ja suorita käännetty .js tiedostot node suoraan:
{
"compilerOptions": {
"module": "commonjs",
"outDir": "./dist"
}
}Käännä ja aja sitten:
npx tsc
node dist/main.jsError: Cannot find module '@aspose/3d'
Perimmäinen syy: Pakettia ei ole asennettu, tai node_modules on vanhentunut.
Korjaa:
npm install @aspose/3dVahvista asennus:
node -e "const { Scene } = require('@aspose/3d'); console.log('OK', new Scene().constructor.name);"Tyhjä kohtaus latauksen jälkeen
Kohtaus latautuu, mutta rootNode.childNodes on tyhjä
Perimmäinen syy (1): Tiedostomuoto sijoittaa kaiken geometrian suoraan rootNode.entity : sen sijaan lapsisolmuina. Tämä on yleistä yksittäisverkko STL-tiedostoissa.
: Diagnostiikka:
import { Scene, Mesh } from '@aspose/3d';
const scene = new Scene();
scene.open('model.stl');
// Check rootNode directly
if (scene.rootNode.entity) {
console.log(`Root entity: ${scene.rootNode.entity.constructor.name}`);
}
console.log(`Child count: ${scene.rootNode.childNodes.length}`);: Korjaus: Kulje alkaen scene.rootNode itse, ei vain sen lapsia:
function visit(node: any): void {
if (node.entity instanceof Mesh) {
const m = node.entity as Mesh;
console.log(`Mesh: ${m.controlPoints.length} vertices`);
}
for (const child of node.childNodes) {
visit(child);
}
}
visit(scene.rootNode);Perimmäinen syy (2): Tiedostopolku on väärä tai tiedosto on nollatavuinen. Tarkista, että tiedosto on olemassa eikä ole tyhjä ennen kutsua open().
import * as fs from 'fs';
const path = 'model.obj';
if (!fs.existsSync(path)) throw new Error(`File not found: ${path}`);
const stat = fs.statSync(path);
if (stat.size === 0) throw new Error(`File is empty: ${path}`);Materiaalilista on tyhjä OBJ-latauksen jälkeen
Perimmäinen syy: Materiaalin lataus on oletuksena pois käytöstä ObjLoadOptions. Kirjasto lataa geometrian lukematta .mtl sivutiedostoa.
Korjaus: Aseta enableMaterials = true:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);Varmista myös, että .mtl tiedosto on samassa hakemistossa kuin .obj tiedosto, koska kirjasto ratkaisee sen suhteessa .obj polkuun.
Formaatti- ja I/O-virheet
openFromBuffer heittää tunnistamattoman formaatin virheen
Perimmäinen syy: Puskurin sisältö ei ole tunnistettavissa oleva binaariformaatti, tai puskuri on vioittunut (katkaistu, väärä koodaus tai base64 raakabittien sijaan).
Diagnostiikka:
const buffer = fs.readFileSync('model.glb');
console.log('Buffer size:', buffer.length, 'bytes');
console.log('First 4 bytes (hex):', buffer.slice(0, 4).toString('hex'));
// GLB magic: 676c5446 ("glTF")
// STL binary starts with 80 bytes of header; no fixed magic
// OBJ is text: openFromBuffer may not detect format
Korjaus: Tekstipohjaisille formaateille (OBJ, COLLADA) anna sopiva options class vihjaamaan formaattia:
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
scene.openFromBuffer(buffer, new ObjLoadOptions());Tulostettu GLB avautuu JSON-muodossa 3D-näytöissä
Perimmäinen syy: GltfSaveOptions.binaryMode oletusarvoisesti on false, tuottaen .gltf JSON-tulostus, vaikka tulosteen tiedostonimi on .glb.
Korjaus: Aseta eksplisiittisesti binaryMode = true:
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);STL-tulosteessa ei ole väri- tai materiaalitietoja leikkurissa
Perimmäinen syy: STL-muoto ei tue materiaaleja tai väriä sen standardimäärityksessä. Väriä tukevat leikkurit käyttävät omistusoikeudellisia laajennuksia, joita ei tueta by @aspose/3d.
Korjaus: Vie sen sijaan 3MF-muotoon, joka tukee väri- ja materiaalimetatietoja:
scene.save('output.3mf');TypeScript-käännösvirheet
Property 'controlPoints' does not exist on type 'Entity'
Perimmäinen syy: Entity on perusluokka; Mesh on konkreettinen tyyppi, jossa on geometrisia ominaisuuksia. Tarvitset instanceof tarkistuksen ennen verkko-kohtaisten jäsenten käyttöä.
Korjaus:
import { Mesh } from '@aspose/3d';
if (node.entity instanceof Mesh) {
const mesh = node.entity as Mesh;
console.log(mesh.controlPoints.length);
}Type 'null' is not assignable to type 'Node'
Perimmäinen syy: getChildNode() palauttaa Node | null. TypeScriptin tiukka tila vaatii, että käsittelet null-tapauksen.
Korjaa:
const child = node.getChildNode('wheel');
if (!child) throw new Error('Node "wheel" not found');
// child is now Node, not null
Cannot find name 'GltfSaveOptions'
Perimmäinen syy: GltfSaveOptions on alipolun moduulissa @aspose/3d/formats/gltf, ei paketin juurta.
Korjaa: Tuo alipolusta:
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';Muisti- ja suorituskykyongelmat
Prosessi loppuu muistiin suurilla FBX-tiedostoilla
Perimmäinen syy: Erittäin suuret FBX-tiedostot (>200 MB) varaa merkittävän pinon. Node.js:n oletusmuistipino on ~1.5 GB 64‑bit -järjestelmissä, mutta se ei välttämättä riitä monen kohtauksen tiedostoja varten.
Korjaus: Kasvata Node.js:n heap-kokoa:
node --max-old-space-size=8192 dist/convert.jsKäsittele tiedostoja myös peräkkäin sen sijaan, että prosessoisit ne rinnakkain, kun muisti on rajoitettu:
for (const file of files) {
const scene = new Scene();
scene.open(file);
scene.save(file.replace('.fbx', '.glb'));
// scene goes out of scope; GC can reclaim
}Katso myös
- FAQ: nopeat vastaukset yleisiin kysymyksiin
- Mallin lataus: latausmallit ja asetukset
- Renderöinti ja vienti: vientiasetukset ja puskuriputket
- API-yleiskatsaus: kaikki luokat ja moduulit