Intento usar el módulo de tipo de archivo que es ESM puro en un proyecto de TS, pero mi broma falla. Configuré las opciones de ESM como se indica aquí, pero aún obtengo un error de SyntaxError: Cannot use import statement outside a module .
He hecho una caja de arena aquí .
Resumen de mi código:
import { fileTypeFromBuffer } from "file-type";Configuración de broma:
export default { testEnvironment: "jest-environment-node", globals: { extensionsToTreatAsEsm: [".ts"], "ts-jest": { useESM: true, }, }, transform: { "^.+\\.(ts|tsx|js|jsx)?$": "ts-jest", //"^.+\\.tsx?$": "ts-jest", }, moduleNameMapper: { "^(\\.{1,2}/.*)\\.js$": "$1", }, preset: "ts-jest", //preset: 'ts-jest/presets/default-esm' // or other ESM presets };TSConfig:
{ "extends": "@tsconfig/node14/tsconfig.json", "compilerOptions": { "target": "ES2018", "module": "commonjs", "lib": ["es2018"], "declaration": true, "strict": true, "strictNullChecks": true, "alwaysStrict": true, //importsNotUsedAsValues // "noImplicitAny": false, "noImplicitReturns": false, "noImplicitThis": false, "noUnusedLocals": false, "noUnusedParameters": false, "noEmit": true, "noFallthroughCasesInSwitch": false, "inlineSourceMap": true, "inlineSources": true, "experimentalDecorators": true, "strictPropertyInitialization": false, // "typeRoots": ["./node_modules/@types"] "resolveJsonModule": true, "outDir": "dist", "baseUrl": ".", "skipLibCheck": true, "forceConsistentCasingInFileNames": true } }¿Algunas ideas?
Tienes que decirle a Jest que transforme esas bibliotecas empaquetadas de ESM con la opción transformIgnorePatterns .
Esta opción especifica las rutas ignoradas y su valor predeterminado es ["/node_modules/", "\\.pnp\\.[^\\\/]+$"] lo que explica por qué las bibliotecas no se transforman.
La solución más sencilla es establecer una matriz vacía:
transformIgnorePatterns: []Pero también podría establecer una configuración más detallada para excluir todo, excepto algunas bibliotecas en particular, como en el ejemplo de expresiones regulares de los documentos.
Además, agregue la "allowJs": true en la configuración de TypeScript.