Me encontré con un problema al usar los espacios de trabajo de NPM 7 y Babel, donde no entiendo cuál es la mejor manera de poder import desde src/ durante el desarrollo, pero uso dist/ durante la producción.
Disculpas por mi horrible explicación, solo haré un ejemplo (esto excluye los archivos de configuración y demás por brevedad):
La estructura de mi proyecto es así:
- / - lambdas/lambda-a - src/ - package.json - packages/package-a - src/ - package.json - package.json Tengo mi campo main en packages/package-a/package.json así:
{ ... "main": "src/index.js", ... } Lo que significa que puedo importar cosas de packages/package-a muy bien en lambdas/lambda-a/src/index.js :
import { thing } from '<package-a>' Sin embargo, al tener el campo main apuntando a src/index.js , esto no funcionará en producción, y si cambio el campo main a dist/index.js ya no puedo importar en lambdas/lambda-a durante desarrollo sin ejecutar una compilación después de cada cambio.
¿Alguien tiene una solución para esto? O, más probablemente, ¿alguien puede señalar dónde estoy siendo un muppet?
La solución que uso es reemplazar src/index.js antes de construir y reemplazarlo nuevamente después de que se haya completado la construcción/empaque. Esto no es elegante ni "cómo deberías hacerlo" (AFAIK), pero me funciona en un proyecto pequeño.
Uso npe porque es liviano, pero existen paquetes similares (o más potentes).
Ejemplo ( packages/package-a/package.json ):
... "devDependencies": { "npe": "^1.1.4" }, "scripts": { "build:before": "npe main dist/index.js'", "build": "(npm run build:before) && (if exist dist rmdir /s /q dist) && (babel src -d dist --copy-files) && (npm pack) && (npm run build:after)", "build:after": "npe main src/index.js", }, ...Pero también sigo buscando una forma más "oficial"...