Tengo un proyecto que incluye una tarea de trago para construir y empaquetar las fuentes y publicarlas en un directorio llamado dist
. Mi objetivo es publicarlo como un paquete npm, pero solo mi carpeta dist. La documentación de npm dice que puedo usar la files
etiqueta para especificar archivos para exportar. Funciona. Pero, la documentación también dice que:
Si nombra una carpeta en la matriz, también incluirá los archivos dentro de esa carpeta
El resultado es un paquete npm, que node_modules se ve así:
Pero me gustaría ver todos mis archivos en la raíz del paquete (sin esa dist
carpeta). Mi index.js
archivo está dentro de la dist
carpeta, pero debería estar en la raíz. Intenté configurar la etiqueta files
como /dist/**/*
pero no funcionó.
¿Cómo puedo lograrlo?
fuente
npm pack
package.jsonfiles
ymain
campos, y.npmignore
le da al desarrollador todo lo necesario para crear un paquete desde un directorio instalable específico.Tengo un problema similar al del cartel original (@robsonrosa). En mi caso, uso mecanografiado que se compila en un
dist
directorio. Si bien podría compilar mecanografiado en el directorio raíz, creo que la mejor solución es generar unpackage.json
archivo separado en el directorio dist.Esto es similar a la sugerencia de @scvnc de copiar el
package.json
pero con un giro:Como parte del proceso de empaquetado, debe generar un archivo
package.json
para el paquete que se base en elpackage.json
archivo principal del directorio raíz pero sea distinto del mismo.Lo racional:
package.json
archivo raíz es el archivo de desarrollo. Puede contener scripts o dependencias de desarrollo que no son útiles para el usuario del paquete, pero pueden plantearle problemas de seguridad. Su procedimiento de empaque puede incluir un código que elimine esa información de la producciónpackage.json
.--- EDITAR ---
Se me pidió una solución en los comentarios. Así que aquí hay un código que estoy usando. Esto debe considerarse como un ejemplo, no pretende ser genérico y es específico de mis proyectos.
Mi configuración:
Quiero empaquetar solo el
dist
directorio y el directorio debe ser el directorio raíz del paquete.El archivo
SetupPackage.ts
en misrc
directorio se compilaráSetupPackage.js
en eldist
directorio por mecanografiado:Este archivo:
package.json
pero elimina los scripts y las dependencias de desarrollo que no son necesarios en el paquete. También corrige el punto de entrada principal al paquete.package.json
en un archivo llamadoversion.txt
..npmignore
paquete desde la raíz.El contenido .npmignore es:
Es decir, las pruebas unitarias (archivos de especificaciones) y los archivos de mapas mecanografiados se ignoran, así como el
SetupPackage.js
archivo y elversion.txt
archivo que crea. Esto deja un paquete limpio.Finalmente, el
package.json
archivo principal tiene los siguientes scripts para que los utilice el sistema de compilación (se supone quesh
se utiliza como shell).Para compilar el paquete, el sistema de compilación clona el repositorio, lo hace
npm install
y luego lo ejecuta, lonpm run buildpackage
que a su vez:dist
directorio asegurando una compilación limpia.SetupPackage.js
archivo que preparadist
para empaquetar.dist
directorio y compila el paquete allí.Utilizo el
version.txt
archivo como una manera fácil de obtener la versión en package.json y etiquetar mi repositorio. Hay muchas otras formas de hacer esto o puede que desee incrementar automáticamente la versión. Elimínelo deSetupPackage.ts
y.npmignore
si no le resulta útil.fuente
Si su proyecto tiene git, puede usar un pequeño truco. Agregue los siguientes scripts a package.json
ahora, cuando ejecute el
publish
comando npm involucreprepublishOnly
. Crea archivos y los guarda en unalib
carpeta (un script de construcción depende de su proyecto). El siguiente comando copia archivos a la carpeta raíz y los eliminalib
. Después de publicar, elpostpublish
script devuelve el proyecto a un estado anterior.fuente
Le recomiendo encarecidamente que use en
.npmignore
lugar de mover o copiar cosas, especialmente si está usando un CI para implementaciones, y simplemente agregue allí los archivos que no desea publicar.https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package
Ejemplo:
Actualizar:
Si desea dividir su código en diferentes paquetes npm usando el mismo repositorio, me topé con este proyecto recientemente: Lerna y se ve muy bien.
Tal vez deberías echar un vistazo
fuente
require('mypackage/foo')
require('mypackage/dist/foo')
Esto funciona bien para mi.
cd TMPDIR;
npm pack
/ruta/a/paquete.jsonTarball creará dentro del directorio TMPDIR.
fuente
npm pack
además, elfiles
campo package.json (o.npmignore
) funciona maravillosamente.opción 1: Navegue a la carpeta y ejecute "npm publish". mando
opción 2: Ejecute npm publish / path / directory
fuente
Necesitas publicar la
dist
carpetaLa forma natural de lograrlo, según el enfoque de npm, es publicar la carpeta que será la raíz. Hay varias formas de hacerlo, dependiendo del entorno final con el que desee trabajar:
npm publish dist
.npm install relative/path/to/dist
node_modules
en otro proyecto en caso de que quieras que los cambios en tu paquete original se reflejen instantáneamente en otro proyecto. En su caso, primerocd dist
y ejecutenpm link
y luego vaya al otro proyecto y ejecutenpm link robsonrosa-ui-alert
.Requisito previo: en cualquier caso anterior, antes de publicar / instalar / enlace, debe colocar en su
dist
carpeta al menos unpackage.json
archivo adecuado . En su caso, debe tener el nombre del paquete definido en su archivo package.json como"name": "robsonrosa-ui-alert"
. Normalmente, querrá que haya otros archivos como README.md o LICENSE.Ejemplo de automatización
Puede automatizar el proceso de publicación utilizando el
prepare
script , combinado con elbuild
script. Además, puede proteger su paquete contra una publicación accidental de la carpeta raíz del paquete con el"private": true
campo incluido en el paquete.json, ubicado en el directorio raíz de su repositorio de paquetes. Aquí hay un ejemplo:"private": true, "scripts": { "build": "rm -rf dist && gulp build && cat ./package.json | grep -v '\"private\":' > dist/package.json", "prepare": "npm run build" },
De esta forma, no publicará la carpeta raíz y obtendrá el paquete compilado y package.json copiado en la
dist
carpeta automáticamente, dentro del proceso de publicación.fuente
Aquí hay un enfoque más que creo que es el más limpio. Todo se basa en la configuración sin necesidad de mover archivos o especificar rutas en los scripts de compilación y paquete:
package.json
Especifique el archivo principal.Algunas opciones adicionales de mecanografiado:
rootDir
. Este directorio tendrá todo el código fuente y debería tener unindex
archivo en él (o algún otro archivo que pueda usar como principal en elpackage.json
).outDir
. Aquí es donde se construirá su comando tsctsconfig.json
fuente
Simplemente cree un
.npmignore
archivo y agregue lo siguiente:fuente