Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Configuración de archivos publicados
Al publicar un paquete en un registro, por defecto se publica todo el contenido del directorio fuente del paquete. Esto no siempre es óptimo, ya que a menudo hay archivos relevantes solo para desarrollo, como pruebas y archivos de configuración. Además, podría darse el caso de que primero compiles tus archivos fuente y los envíes a una ubicación centralizada en una configuración de monorepo.
Lerna ofrece varias opciones de configuración para garantizar que solo los archivos apropiados se empaqueten y publiquen en un registro.
"files" y .gitignore
Lerna siempre publica utilizando las herramientas de npm, que incluyen formas integradas de incluir o excluir archivos. La forma más sencilla de configurar qué archivos se incluyen en el paquete publicado es mediante la propiedad "files" en package.json y .gitignore. Consulta la documentación de npm para más información sobre cómo npm reconoce los archivos para publicación.
--contents [legacy -> preferir --directory]
Varios comandos, incluido lerna publish, admiten la opción generalizada --contents, que establece el directorio de publicación para TODOS los paquetes.
Esto solo es útil para publicación si los paquetes en tu monorepo tienen una estructura de salida simple y uniforme. El argumento pasado a --contents debe ser un subdirectorio que exista dentro de cada paquete que se publique. Consulta la documentación de lerna publish para más detalles.
En la versión 7, introdujimos la opción --directory para lerna publish, más potente y específica. Te recomendamos usarla en lugar de --contents, que probablemente quedará obsoleta en el futuro.
--directory
En la versión 7, introdujimos la opción --directory para lerna publish, más potente y específica.
Puede configurarse en tu lerna.json y admite los siguientes marcadores de posición dinámicos: {workspaceRoot}, {projectRoot}, {projectName}. Estos valores se reemplazarán dinámicamente al momento de la publicación.
Esto significa que ahora puedes expresar de manera concisa configuraciones que son uniformes en estilo, aunque no idénticas literalmente en todos los paquetes.
Por ejemplo, supongamos un monorepo donde construimos todos los paquetes y sus salidas se envían a una ubicación centralizada (como es común en espacios de trabajo Nx):
Tenemos packages/package-a que escribe su salida de compilación en dist/packages/package-a, y packages/package-b que escribe su salida en dist/packages/package-b.
Aunque las rutas son estrictamente diferentes, ahora podemos expresar un enfoque consistente usando marcadores de posición:
{workspaceRoot}/dist/{projectRoot}
{workspaceRoot} se reemplazará por la ruta absoluta a nuestro repositorio Lerna, y {projectRoot} será reemplazado por packages/package-a en el caso de package-a, y por packages/package-b en el caso de package-b.
La forma de aplicar esto en lerna.json es la siguiente:
// lerna.json
{
"version": "1.0.0",
"command": {
"publish": {
"directory": "{workspaceRoot}/dist/{projectRoot}"
}
}
}
También puedes establecer o anular la opción de directorio de publicación dentro del package.json de un paquete, si necesitas algo completamente personalizado para ese paquete específico.
Ejemplo de configuración para un paquete que publica desde la carpeta dist/packages/foo en la raíz del repositorio:
// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/foo"
}
}
}
}
Debes asegurarte de que tu directorio personalizado contenga un package.json válido que se usará para la publicación en el registro. Puedes generarlo mediante scripts del ciclo de vida como prepare, prepublishOnly o prepack si necesitas lógica personalizada compleja, o simplemente copiarlo automáticamente desde el código fuente del paquete configurándolo como un recurso. Consulta la próxima sección sobre Incluir recursos adicionales en paquetes publicados para más detalles.
Si deseas que uno de tus paquetes se comporte como un paquete estándar de Lerna y se publique desde el código fuente, puedes anular su configuración de publicación así:
// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "."
}
}
}
}
Incluir recursos adicionales en paquetes publicados
Lerna puede copiar archivos desde tu directorio fuente al directorio especificado para publicación. Al igual que con la opción directory, esto puede configurarse en lerna.json (incluyendo marcadores dinámicos en las definiciones de recursos) o dentro del package.json de un paquete específico.
Independientemente del archivo donde se configure, la propiedad "assets" debe ser un array de patrones glob u objetos con propiedades "from" y "to". La propiedad "from" debe ser un archivo específico o patrón glob que coincida con archivos en el directorio fuente, y "to" es la ruta donde se copiará el archivo dentro del directorio de publicación.
Este paquete de ejemplo genera su salida en el directorio raíz dist/packages/bar. Lerna está configurado para copiar archivos adicionales a este directorio, luego publica el contenido de dist/packages/bar en npm.
// packages/bar/package.json
{
"name": "bar",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/bar",
"assets": [
"README.md",
"package.json",
"docs/*.md",
{
"from": "static/images/*",
"to": "assets"
},
{
"from": "../../CONTRIBUTING.md",
"to": "./"
}
]
}
}
}
}
Lerna procesará la configuración anterior y copiará los archivos correspondientes al directorio dist, generando una estructura como esta:
dist/packages/bar
├── assets
│ ├── my-image-1.png
│ └── my-image-2.png
├── CONTRIBUTING.md
├── docs
│ ├── my-doc-1.md
│ └── my-doc-2.md
├── package.json
└── README.md