node.js - Errores de Node/Typescript/tslint en el operador de encadenamiento opcional (?.) en la carpeta node_modules
Tengo un script de Node que funciona bien en la versión de Node hasta la 17:
nvm use 17
Now using node v17.9.1 (npm v8.11.0)
cd src
npx tsc
npx node parser.js
cd ..
A partir de la versión 18 de Node, produce un error porque @npmcli está usando un operador de encadenamiento opcional:
nvm use 18
Now using node v18.16.0 (npm v9.5.1)
cd src
npx tsc
/Users/mles/.nvm/versions/node/v18.16.0/lib/node_modules/npm/node_modules/@npmcli/config/lib/index.js:485
const raw = this.data.get(problem.where).raw?.[problem.from]
^
SyntaxError: Unexpected token '.'
Obtengo un error similar en las versiones de node 19, 20 y 21. Supongo que tiene que ver con mi configuración de TypeScript o TSLint, que no le gusta ningún operador de encadenamiento opcional. He intentado ignorar cualquier carpeta node_modules en mi archivo tslint.json, pero no resuelve el problema:
{
"defaultSeverity": "error",
"extends": [
"tslint:recommended"
],
"jsRules": {},
"rules": {
"no-console": false,
"object-literal-sort-keys": [
true,
"match-declaration-order"
],
"max-line-length": [
true,
200
],
"typedef": [
true,
"member-variable-declaration",
"variable-declaration"
]
},
"rulesDirectory": [],
"compilerOptions": {
"skipLibCheck": true
},
"linterOptions": {
"exclude": [
"node_modules"
]
}
}
Mi archivo tsconfig.json:
{
"compilerOptions": {
"target": "ESNEXT",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"sourceMap": true
}
}
¿Alguna pista sobre cómo permitir el operador de encadenamiento opcional en mi configuración?
Respuesta #1
Puedes actualizar tus compilerOptions para incluir las reglas específicas para encadenamiento opcional. Esto te permitirá mantener el modo estricto activado y seguir validando las dependencias.
Tus compilerOptions se verían así:
{
"compilerOptions": {
"target": "ESNEXT",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"sourceMap": true,
"lib": ["ESNext", "DOM", "ES2020.OptionalChaining", "ES2020.NullishCoalescing"]
}
}
(Es posible que necesites reconstruir tu proyecto de TypeScript (con npx tsc) después para que se aplique el cambio)
Respuesta #2
Puedes omitir la carpeta node_modules como se indica a continuación
{
"compilerOptions": {
"skipLibCheck": true
},
}
O
Línea de comandos tsc --skipLibCheck
O
"include": [
"src/*"
],
"exclude": [
"node_modules",
"./node_modules",
"./node_modules/*",
"./node_modules/@types/node/index.d.ts",
]
}
