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 filesetiqueta 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 distcarpeta). Mi index.jsarchivo está dentro de la distcarpeta, pero debería estar en la raíz. Intenté configurar la etiqueta filescomo /dist/**/*pero no funcionó.
¿Cómo puedo lograrlo?
fuente


npm packpackage.jsonfilesymaincampos, y.npmignorele 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
distdirectorio. Si bien podría compilar mecanografiado en el directorio raíz, creo que la mejor solución es generar unpackage.jsonarchivo separado en el directorio dist.Esto es similar a la sugerencia de @scvnc de copiar el
package.jsonpero con un giro:Como parte del proceso de empaquetado, debe generar un archivo
package.jsonpara el paquete que se base en elpackage.jsonarchivo principal del directorio raíz pero sea distinto del mismo.Lo racional:
package.jsonarchivo 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
distdirectorio y el directorio debe ser el directorio raíz del paquete.El archivo
SetupPackage.tsen misrcdirectorio se compilaráSetupPackage.jsen eldistdirectorio por mecanografiado:Este archivo:
package.jsonpero 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.jsonen un archivo llamadoversion.txt..npmignorepaquete 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.jsarchivo y elversion.txtarchivo que crea. Esto deja un paquete limpio.Finalmente, el
package.jsonarchivo principal tiene los siguientes scripts para que los utilice el sistema de compilación (se supone queshse utiliza como shell).Para compilar el paquete, el sistema de compilación clona el repositorio, lo hace
npm instally luego lo ejecuta, lonpm run buildpackageque a su vez:distdirectorio asegurando una compilación limpia.SetupPackage.jsarchivo que preparadistpara empaquetar.distdirectorio y compila el paquete allí.Utilizo el
version.txtarchivo 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.tsy.npmignoresi 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
publishcomando npm involucreprepublishOnly. Crea archivos y los guarda en unalibcarpeta (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, elpostpublishscript devuelve el proyecto a un estado anterior.fuente
Le recomiendo encarecidamente que use en
.npmignorelugar 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 packademás, elfilescampo 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
distcarpetaLa 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/distnode_modulesen 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 disty ejecutenpm linky 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
distcarpeta al menos unpackage.jsonarchivo 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
preparescript , combinado con elbuildscript. Además, puede proteger su paquete contra una publicación accidental de la carpeta raíz del paquete con el"private": truecampo 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
distcarpeta 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.jsonEspecifique el archivo principal.Algunas opciones adicionales de mecanografiado:
rootDir. Este directorio tendrá todo el código fuente y debería tener unindexarchivo en él (o algún otro archivo que pueda usar como principal en elpackage.json).outDir. Aquí es donde se construirá su comando tsctsconfig.jsonfuente
Simplemente cree un
.npmignorearchivo y agregue lo siguiente:fuente