typescript - npm run build misslyckas på Vue 3-projekt som använder vite


Jag får ett konstigt fel när jag försöker köra npm run build på ett Vue 3-projekt. Det misslyckas med:

[vite:esbuild] Cannot read properties of undefined (reading 'endsWith')
file: /home/simon/vue3/birch-farm/src/main.ts
error during build:
TypeError: Cannot read properties of undefined (reading 'endsWith')
    at file:///home/simon/vue3/birch-farm/node_modules/vite/dist/node/chunks/dep-e8f070e8.js:13301:30

Genom att gräva i filen och raden kan jag se att det är följande kod som orsakar problemet, men jag är förbryllad över vad jag kan göra eller prova:

function resolveReferencedTSConfigFiles(result) {
  const dir = require$$0$4.dirname(result.tsconfigFile);
  return result.tsconfig.references.map((ref) => {
    const refPath = ref.path.endsWith(".json") ? ref.path : require$$0$4.join(ref.path, "tsconfig.json");
    return resolve2posix(dir, refPath);
  });
}

Min ts.config-fil är som följer:

{
  "files": [],
  "references": [
    {
      "path": "./tsconfig.node.json"
    },
    {
      "path": "./tsconfig.app.json"
    },
    {
      "compilerOptions": {
        "target": "es5",
        "module": "esnext",
        "types": ["node"]
      }
    }    
  ]
}

Svar #1

Om du kontrollerar det tredje objektet i din "references" Array så är det

{
      "compilerOptions": {
        "target": "es5",
        "module": "esnext",
        "types": ["node"]
      }
    }  

Det innehåller inte path-nyckeln där och det är det som orsakar det, vad du kan göra är att lägga till en kontroll om path finns på denna nyckel, då fortsätter flödet, annars gör inget. Vi kan också använda filterfunktionen.

function resolveReferencedTSConfigFiles(result) {
  const dir = require$$0$4.dirname(result.tsconfigFile);
  return result.tsconfig.references.map((ref) => {
    const refPath = ref.path.endsWith(".json") ? ref.path : require$$0$4.join(ref.path, "tsconfig.json");
    return resolve2posix(dir, refPath);
  });
}

ändra det till

function resolveReferencedTSConfigFiles(result) {
  const dir = require$$0$4.dirname(result.tsconfigFile);
  return result.tsconfig.references.filter((ref)=>ref.path!=undefined).map((ref) => {
    const refPath = ref.path.endsWith(".json") ? ref.path : require$$0$4.join(ref.path, "tsconfig.json");
    return resolve2posix(dir, refPath);
  });
}