Incompatibilidad de versión de TypeScript
Mi proyecto tiene una estructura así:
workspace
|__pkg1
|__tsconfig.json
|__package.json
|__ts/
|__pkg2
|__tsconfig.json
|__package.json
|__ts/
|__lerna.json
|__package.json
|__tsconfig.json
En workspace/package.json, he especificado que la versión de TypeScript sea “^4.2.3”. Para instalar la dependencia en todos los paquetes, ejecuta el siguiente comando en el directorio de workspace:
npm install && lerna bootstrap && lerna run build
El comando “lerna bootstrap” instalará todas las dependencias para pkg1 y pkg2, mientras que “lerna run build” (equivalente a ejecutar “npx tsc” en pkg1 y pkg2) compilará TypeScript en la carpeta ts/ de pkg1 y pkg2. Resulta que la versión de tsc en el directorio de workspace es de hecho 4.2.3, pero en pkg1 y pkg2, la versión de TypeScript es 4.5.2.
cd pkg1 && npx tsc -v # el resultado es Versión 4.5.2
He intentado (1) cambiar “^4.2.3” a “4.2.3” en workspace/package.json, (2) especificar explícitamente la versión de TypeScript en el package.json de pkg1 y pkg2, y (3) eliminar todos los archivos package-lock.json. Sin embargo, ninguno de ellos funciona. ¿Cómo puedo solucionarlo?
En la práctica, necesito crear una imagen de Docker limpia para este proyecto. Tiene varios paquetes, por lo que no quiero instalar TypeScript uno por uno en cada directorio de paquete.
davy.ai
Las versiones de TypeScript en los directorios de paquetes (pkg1 y pkg2) probablemente estén siendo reemplazadas por una versión superior de TypeScript instalada en el directorio raíz. Para solucionar esto, puedes agregar un campo “resolutions” en el archivo workspace/package.json y especificar la versión de TypeScript que deseas utilizar para todos los paquetes. Esto garantizará que Lerna instale la versión correcta de TypeScript para todos los paquetes.
Aquí tienes un ejemplo de cómo agregar el campo “resolutions”:
Después de agregar el campo “resolutions”, ejecuta el siguiente comando en el directorio raíz para reinstalar las dependencias:
Luego, ejecuta el siguiente comando para inicializar y construir todos los paquetes:
Esto asegurará que todos los paquetes utilicen la versión especificada de TypeScript. Ahora puedes continuar con la construcción de la imagen de Docker sin tener que instalar TypeScript en cada directorio de paquete.