es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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”:

    {
      "name": "workspace",
      "private": true,
      "workspaces": ["pkg1", "pkg2"],
      "resolutions": {
        "typescript": "^4.2.3"
      },
      "devDependencies": {
        "lerna": "^4.0.0",
        "typescript": "^4.2.3"
      }
    }
    

    Después de agregar el campo “resolutions”, ejecuta el siguiente comando en el directorio raíz para reinstalar las dependencias:

    npm install
    

    Luego, ejecuta el siguiente comando para inicializar y construir todos los paquetes:

    lerna bootstrap && lerna run build
    

    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.

Comments are closed.