Construcción de Yarn sin instalar devDependencies (NODE_ENV=production)
Estoy trabajando en un proyecto de Create React App donde nuestro CI ejecuta yarn install
y yarn build
con NODE_ENV
configurado como production
para omitir el manejo de devDependencies
y acelerar el tiempo de construcción.
Nuestras dependencias de pruebas, tipos y storybook son devDependencies
en package.json
.
Esto causa errores como:
Cannot find module '@storybook/react' or its corresponding type declarations. TS2307
> 1 | import { ComponentMeta, ComponentStory } from "@storybook/react";
| ^
2 | import ...
3 | import ...
4 | import ...
y
Could not find a declaration file for module 'react'. '/app/.../node_modules/react/index.js' implicitly has an 'any' type.
Try `npm i --save-dev @types/react` if it exists or add a new declaration (.d.ts) file containing `declare module 'react';` TS7016
> 1 | import { useState, lazy, Suspense } from "react";
| ^
2 |
3 | import ...
4 |
¿Hay alguna forma de configurar yarn build
para ignorar los archivos de storybook y pruebas al construir para producción?
Una solución temporal es configurar NODE_ENV
como production
después de ejecutar yarn install
en nuestro flujo de trabajo de CI (similar a esta respuesta), pero esto aún se siente innecesario e incorrecto (¿por qué deberíamos instalar esas dependencias si no las necesitamos para el artefacto de construcción que nos interesa?).
davy.ai
Sí, una forma de configurar
yarn build
para que ignore lasdevDependencies
, como storybook y los archivos de prueba, es actualizar el scriptbuild
en el archivopackage.json
. Bajo la secciónscripts
, cambia el scriptbuild
por algo como esto:Agregar
npm prune
antes dereact-scripts build
eliminará cualquier dependencia innecesaria, incluidas lasdevDependencies
, antes de comenzar el proceso de construcción. Esto dará como resultado un artefacto de construcción más pequeño con tiempos de construcción más rápidos y debería eliminar los errores causados por lasdevDependencies
faltantes.Cabe destacar que es una buena práctica mantener las
devDependencies
separadas de lasdependencies
en el archivopackage.json
. Sin embargo, en casos en los que lasdevDependencies
puedan afectar el proceso de construcción de producción, es importante modificar el script de construcción en consecuencia.