<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ npm - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ npm - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 22 May 2026 20:03:05 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/tag/npm/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué es NPM? ]]>
                </title>
                <description>
                    <![CDATA[ Foto por Sigmund [https://unsplash.com/@sigmund?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText]  on Unsplash [https://unsplash.com/s/photos/node?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText] En este segundo artículo de la serie sobre las distintas herramientas orientadas a la experiencia de desarrollo revisaremos que es npm. Puedes encontrar el primer artículo: ¿Qué es Linting y ESLint? en este enlace [/espanol/news/que-es-linting-y-eslint/]. ¿Qué es n ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-es-npm/</link>
                <guid isPermaLink="false">601b13c462984e09f60856a4</guid>
                
                    <category>
                        <![CDATA[ npm ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Matias Hernandez ]]>
                </dc:creator>
                <pubDate>Mon, 08 Feb 2021 15:15:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/02/English-Header.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <small><span>Foto por <a href="https://unsplash.com/@sigmund?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Sigmund</a> on <a href="https://unsplash.com/s/photos/node?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span></small><!--kg-card-end: html--><p>En este segundo artículo de la serie sobre las distintas herramientas orientadas a la experiencia de desarrollo revisaremos que es <strong>npm</strong>.</p><p>Puedes encontrar el primer artículo: <a href="https://www.freecodecamp.org/espanol/news/que-es-linting-y-eslint/">¿Qué es Linting y ESLint? en este enlace</a>.</p><h2 id="-qu-es-npm">¿Qué es npm?</h2><p><strong>npm</strong> es parte esencial de Node.js, el entorno de ejecución de javaScript en el lado del servidor basado en el motor V8 de Google. Es muy seguramente la principal razón del gran éxito de Node permitiendo que cientos de desarrolladores puedan compartir paquetes de software entre distintos proyectos.</p><p>En este momento, se han publicado 1,493,231 paquetes por medio de su repositorio con más de 27 mil millones de descargas.</p><p><strong>npm</strong> responde a las siglas de <strong>Node Package Manager</strong> o manejador de paquetes de node, es la herramienta por defecto de JavaScript para la tarea de compartir e instalar paquetes.</p><p>Tal como reza su documentación, <strong>npm</strong> se compone de al menos dos partes principales.</p><ul><li>Un repositorio online para publicar paquetes de software libre para ser utilizados en proyectos Node.js</li><li>Una herramienta para la terminal (command line utility) para interactuar con dicho repositorio que te ayuda a la instalación de utilidades, manejo de dependencias y la publicación de paquetes.</li></ul><p>Es decir, en tu proyecto basado en Node — que actualmente incluye los proyectos de aplicaciones web que utilizan Node para su proceso de compilación y generación de archivos — utilizarás la utilidad de linea de comandos (cli) para consumir paquetes desde el repositorio online, un listado gigantesco de soluciones de software para distintos problemas disponibles públicamente en <a href="http://npmjs.com/">npmjs.com</a> y para manejar dependencias, y para ello necesitas un archivo de configuración que le diga a <strong>npm</strong> que este es un proyecto node.</p><h2 id="package-json">package.json</h2><p>Este archivo indica a npm que el directorio en el que se encuentra es en efecto un proyecto o paquete npm. Este archivo contiene la información del paquete incluyendo la descripción del mismo, versión, autor y más importante aún dependencias.</p><p>Este archivo es generado automáticamente mediante la ejecución de un script de <strong>npm:</strong> <code>npm init</code> este script es ejecutao para inicializar un proyecto JavaScript, al ejecutarlo la linea de comandos te hará algunas preguntas para crear el paquete:</p><pre><code class="language-jsx"> $ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install &lt;pkg&gt;` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (test)
</code></pre><blockquote>Esta utilidad te guiará en el proceso de crear un archivo package.json. Solo cubre los items más comunes y trata de adivinar algunos valores por defecto. Revisa <code>npm help init</code> para documentación más a fondo sobre estos campos y que hacen exactamente. Utiliza <code>npm install &lt;pkg&gt;</code> para instalar paquetes y guardarlos como dependencia en el archivo <code>package.json</code>. Presiona <code>^C</code> en cualquier momento para cancelar</blockquote><blockquote>nombre del paquete: (que-es-npm)</blockquote><p>Lo primero que verás al ejecutar <code>npm init</code> es un mensaje como el anterior y la primera pregunta: <code>nombre del paquete: (que-es-npm)</code> que entre paréntesis mostrará el nombre del directorio en el que se está ejecutando como nombre por defecto.</p><p>Luego veras lo siguiente.</p><pre><code class="language-bash">version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
author:
license (MIT):
private:
</code></pre><p>Puedes simplemente presionar <code>Enter</code> en cada una de estas opciones para dejar vació el campo o guardar el valor por defecto que se muestra entre paréntesis.</p><ul><li><strong>version</strong>: Corresponde a la versión de tu proyecto. Lo ideal es mantener este campo actualizado cuando modificas algo en tu proyecto o librería utilizando por ejemplo <a href="https://semver.org/lang/es/">semver</a>.</li><li><strong>description</strong>: Una breve descripción de tu proyecto. Particularmente importante si lo que estás creando es un paquete que publicarás vía npm.</li><li><strong>entry point:</strong> Define cuál será el punto de "entrada" de tu proyecto. Esto es, que archivo se ejecutará cuando se importe tu proyecto dentro de otro. Nuevamente, especialmente importante para paquetes de librerías.</li><li><strong>test command:</strong> Aquí puedes definir el comando que quieres ejecutar para realizar las pruebas de tu proyecto, este comando se ejecutará cuando escribas <code>npm run test</code> en tu terminal.</li><li><strong>git repository</strong>: Define la url del repositorio git en donde este proyecto está alojado, se utiliza para informar a los usuarios de tu paquete el repositorio en donde encontrar el código fuente del proyecto.</li><li><strong>author:</strong> El nombre e email de quien creó este proyecto.</li><li><strong>license</strong>: Identifica el tipo de licencia de uso de tu proyecto. Permite a las personas saber que y que no está permitido al usar tu código. Puedes encontrar la lista completa de licencias soportadas por este campo <a href="https://spdx.org/licenses/">aquí</a>.</li><li><strong>private:</strong> Es un valor boolean que te permite evitar que tu paquete se publique en el repositorio. Si lo que estás creando es un proyecto personal este valor será <strong>true.</strong></li></ul><p>Una vez contestadas todas las preguntas y terminado el proceso de inicialización tendrás un nuevo archivo dentro del directorio de tu proyecto: <code>project.json</code> cuyo contenido será similar a este</p><pre><code class="language-json">{
  "name": "que-es-npm",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \\"Error: no test specified\\" &amp;&amp; exit 1"
  },
  "author": "Matias Hernandez &lt;matiasfh@gmail.com&gt; (&lt;https://matiashernandez.dev&gt;)",
  "license": "ISC"
}
</code></pre><h2 id="npm-scripts">npm scripts</h2><p>Una importante sección de este archivo es <code>scripts</code>. Esta sección define un listado de propiedades que permiten ejecutar comandos dentro del contexto de tu proyecto incluyendo: comandos de otros paquetes listados como dependencias, scripts personalizados, scripts bash, etc.</p><p>Por defecto se crea un script para ejecutar el comando de <strong>test</strong> que, si no agregaste nada personalizado en el proceso de inicialización sólo tendrá una llamada al comando <strong>echo,</strong> es decir, ****al ejecutar en la terminal <code>npm run test</code> verás en la consola <code>Error: no test specified</code></p><p>Un ejemplo de producción de esta sección es:</p><pre><code class="language-json">{
		...
		...
    "scripts": {
        "start": "npm run generate &amp;&amp; PORT=5000 react-scripts start",
        "build": "react-scripts build",
        "storybook": "start-storybook -p 6006 -h localhost",
        "build-storybook": "build-storybook -s public",
        "test": "jest",
        "test:watch": "jest --watch --silent",
        "cypress": "cypress run",
        "eject": "react-scripts eject",
        "lint": "eslint src/**/*.{js,ts,tsx} --fix",
        "prettier": "npx prettier --write '**/*.tsx'",
        "generate": "graphql-codegen --config codegen.yml"
    },
    ...
		...
}
</code></pre><p>En este ejemplo podemos ver una lista de 11 scripts que cumplen diferentes tareas tales como:</p><ul><li><strong>start:</strong> Primero ejecuta el script <strong>generate</strong> y luego inicia la aplicación web. <code>react-scripts</code> es una dependencia del paquete y se encuentra disponible dentro del directorio <code>node_modules</code>.</li><li><strong>build:</strong> Ejecuta la compilación de la aplicación en modo producción.</li><li><strong>lint:</strong> Ejecuta el proceso de linting (revisión de formato y estilo de código) del proyecto (Puedes leer más sobre este proceso en el <a href="https://www.freecodecamp.org/espanol/news/que-es-linting-y-eslint/">primer artículo</a> de esta colección)</li><li><strong>test:</strong> Ejecuta el script de pruebas basado en el paquete <strong>jest</strong> que también está instalado como dependencia.</li><li><strong>prettier</strong>: Ejecuta <strong>prettier</strong> mediante el uso de <strong>npx.</strong> Este es un paquete especial de npm que permite ejecutar binarios dentro del alcance de tu proyecto sin necesidad de especificar dicho comando como script dentro del archivo <code>package.json</code>.</li></ul><h2 id="dependencias-y-dependencias-de-desarrollo">Dependencias y dependencias de desarrollo</h2><p>La siguiente sección muy relevante dentro del archivo es el listado de dependencias y el listado de dependencias de desarrollo</p><pre><code class="language-json">{
   
    "dependencies": {
        "react": "^17.0.1",
        "react-dom": "^17.0.1",
        "react-hook-form": "6.14.1",
        "react-i18next": "11.8.5",
        "react-query": "^3.5.12",
        "react-router-dom": "5.2.0",
        "react-scripts": "4.0.1",
        "react-table": "^7.6.3",
        "react-virtual": "2.3.2",
        "yup": "0.32.8"
    },
		...
		...
    "devDependencies": {
        "@emotion/jest": "11.1.0",
        "@graphql-codegen/add": "2.0.2",
        "@graphql-codegen/cli": "1.20.1",
        "@graphql-codegen/introspection": "1.18.1",
        "@graphql-codegen/typescript": "1.20.2",
        "@graphql-codegen/typescript-graphql-request": "3.0.1",
        "@graphql-codegen/typescript-operations": "1.17.14",
        "@types/jest": "^26.0.20",
        "@types/node": "^12.0.0",
        "@types/react": "^16.9.53",
        "@types/react-dom": "^16.9.8",
        "@types/react-router-dom": "^5.1.7",
        "cypress": "^6.2.1",
        "eslint": "^7.17.0",
        "eslint-config-prettier": "^7.1.0",
        "eslint-plugin-prettier": "^3.3.1",
        "starwars-names": "1.6.0",
        "stylelint": "13.8.0",
        "stylelint-config-prettier": "8.0.2",
        "stylelint-prettier": "1.1.2",
        "ts-jest": "^26.4.4"
    }
}
</code></pre><p>Estas secciones, definen que paquetes disponibles en el repositorio de <strong>npm</strong> son requeridos por tu proyecto indicando también la versión necesaria. La versión mostrada aquí está en formato <strong>semver</strong> y corresponde al campo <strong>version</strong>mencionado antes.</p><p>Estas dependencias son instaladas al ejecutar <code>npm install &lt;pkg&gt; --save</code> y en el caso de las dependencias de desarrollo utilizando <code>npm install &lt;pkg&gt; --save-dev</code>.</p><p>La diferencia de estos listados es que <code>dependencies</code> está destinado a ser utilizando en producción y <code>devDependencies</code>define paquetes que son necesarios sólo durante el desarrollo de tu proyecto.</p><p>Es importante conocer cómo se definen las versiones a utilizar en estas dependencias. Cada una de ellas muestra un número basado en semver en la forma <strong>mayor.minor.patch.</strong></p><ul><li><strong>mayor:</strong> Representa una versión mayor que genera cambios en la API del producto.</li><li><strong>minor</strong>: Representa un valor que aumenta cuando se hacen cambios retro-compatibles.</li><li><strong>patch</strong>: Un valor que aumenta cada vez que se hacen reparaciones de errores o mejoras sutiles.</li></ul><p>También es posible encontrar algunos símbolos frente a la numeración de la versión, estos son:</p><ul><li><code>^</code>: latest minor release. Por ejemplo <code>^1.0.4</code> indica que 1.0.4 es la versión más "baja" que se puede instalar pero permite que se instale cualquier versión superior a esa pero que se encuentre dentro de la versión <code>1</code>.</li><li><code>~</code>: latest patch release. Esta es la forma contraria a &nbsp;<code>^</code>. Esta especificación &nbsp;<code>~1.0.4</code> puede instalar la versión <code>1.0.7</code> si es que esta es la ultima version del <strong>patch</strong>.</li></ul><p>Una vez instalados los paquetes de tus dependencias la información de las versiones instaladas queda almacenada en un archivo llamado <code>package-lock.json</code></p><h2 id="package-lock-json">package-lock.json</h2><p>Este archivo es auto generado por <code>npm install</code> y es una lista descriptiva y exacta de las versiones instaladas durante tu proceso. No esta destinado a ser leído ni manipulado por los desarrolladores, si no, para ser un insumo del proceso de manejo de dependencias.</p><h1 id="-c-mo-trabajar-con-npm">¿Cómo trabajar con npm?</h1><p>Lo más usual que harás con <code>npm</code> es la instalación de dependencias, esto se hace mediante <code>npm install</code> para instalar todas las dependencias listadas en el archivo <code>package.json</code> o utilizando <code>npm install &lt;pkg&gt;</code> para instalar algún paquete en particular.</p><h2 id="npm-install">npm install</h2><p>Este script nativo de <code>npm</code> tiene algunas otras opciones a la hora de hacer la instalación de paquetes.</p><p>Por defecto al ejecutar <code>npm install &lt;pkg&gt;</code> la última versión disponible en el repositorio agregando el símbolo <code>^</code> a la versión.</p><p>Al ejecutar <code>npm install &lt;pkg&gt;</code> el paquete se instalará dentro del directorio <code>node_modules</code> que está dentro de tu proyecto.</p><p>Puedes usar algunos parámetros tales como</p><ul><li><code>-g</code> para indicar que quieres que el paquete se instale globalmente</li><li><code>--production</code> indica que la ejecución de <code>npm install</code> solo instalará las dependencias listadas en el apartado <code>dependencies</code> dejando de lado las dependencias de desarrollo.</li></ul><h2 id="npm-audit">npm audit</h2><p><strong>npm</strong> tiene una miriada de paquetes disponibles lo que es una gran característica indicando lo saludable del ecosistema que es capaz de generar nuevas librerías a gran velocidad, pero también puede ser un problema. <strong>npm</strong> puede albergar paquetes maliciosos o con problema de seguridad.</p><p>La organización trás <strong>npm</strong> mantiene una lista de agujeros de seguridad y puedes utilizar este comando para revisar tus dependencias.</p><p><code>npm audit</code> te entregará información de las vulnerabilidades encontradas en tus dependencias junto con una breve descripción de como resolverlo indicando la versión que corrige el defecto.</p><h2 id="npm-publish">npm publish</h2><p>En el caso de que tu proyecto sea una librería de software libre que quieres compartir con otros, este comando será el que te permitirá publicar tu paquete en el repositorio, solo necesitas ejecutar:</p><ul><li><code>npm login</code> para ingresar a tu cuenta de npm</li><li><code>npm publish</code> para subir tu paquete al repositorio</li></ul><p>Ten en cuenta que necesitas tener bien configurados tu <strong>entry point</strong> y el script de <strong>build.</strong></p><p>También puedes hacer uso de los scripts del ciclo de vida. Una serie de scripts que se ejecutan en diferentes momentos del proceso de publicación:</p><ul><li><strong>prepare</strong> (desde <code>npm@4.0.0</code>): Se ejecuta antes de que el paquete se <em>empaquete</em> (packed) y antes de que se publique. También se ejecuta al correr <code>npm install</code> y <strong>después</strong> del script <code>prepublishOnly</code></li><li><strong>prepublishOnly:</strong> Se ejecuta <strong>antes</strong> de que el paquete sea preparado y empaquetado y solo cuando se ejecuta <code>npm publish</code></li><li><strong>prepack:</strong> Se ejecuta <strong>antes</strong> de empaquetar, es decir antes de <code>npm pack</code> y <code>npm publish</code></li><li><strong>postpack:</strong> Se ejecuta <strong>después</strong> de que el paquete fuese generado y ubicado en su destino final.</li></ul><h3 id="-cu-ndo-usar-estos-scripts">¿Cuándo usar estos scripts?</h3><p>Cuando necesitas que tu paquete ejecuta alguna acción antes de ser utilizado y que no dependa del sistema operativo en que está siendo instalado, por ejemplo: transpilar tu código Typescript a JavaScript, obtener datos remotos que tu paquete necesita, etc.</p><h3 id="-qu-scripts-se-ejecutan-al-publicar-un-paquete">¿Qué scripts se ejecutan al publicar un paquete?</h3><p>Cuando ejecutas <code>npm publish</code> una serie de scripts son ejecutados automáticamente por <strong>npm</strong> el orden de estos scripts es el siguiente:</p><ul><li><code>prepublishOnly</code></li><li><code>prepare</code></li><li><code>prepublish</code></li><li><code>publish</code></li><li><code>postpublish</code></li></ul><p>Es decir, si necesitas ejecutar algún comando antes de que se publique tu paquete debes configurar el script <code>prepublishOnly</code> ¿Cómo?</p><pre><code class="language-json">{
	"scripts": {
		"prepublishOnly": "compile-my-code src/"
	}
}
</code></pre><h2 id="conclusi-n">Conclusión</h2><p><strong>npm</strong> es la solución que ofrece el ecosistema de JavaScript para manejar dependencias, auditar paquetes y mantener un repositorio de paquetes disponible para todos los usuarios, es la herramienta central de todo proyecto JavaScript sea este backend o frontend.</p><p>El sistema de <strong>npm</strong> se basa en un archivo centralizado que describe los metadatos del proyecto, scripts y dependencias tanto de producción como de desarrollo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/02/Footer-Social-Card.jpg" class="kg-image" alt="Footer-Social-Card" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/02/Footer-Social-Card.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2021/02/Footer-Social-Card.jpg 1000w, https://www.freecodecamp.org/espanol/news/content/images/size/w1600/2021/02/Footer-Social-Card.jpg 1600w, https://www.freecodecamp.org/espanol/news/content/images/size/w2400/2021/02/Footer-Social-Card.jpg 2400w" sizes="(min-width: 720px) 720px" width="2000" height="533" loading="lazy"></figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ npm vs npx — ¿Cuál es la Diferencia? ]]>
                </title>
                <description>
                    <![CDATA[ Si alguna vez has usado Node.js [https://nodejs.org/], entonces seguro que has usado npm. npm (node package manager) es el gestor de dependencias/paquetes que obtienes por defecto cuando instalas Node.js. Proporciona una manera para que los desarrolladores instalen paquetes tanto a nivel global como local. A veces puede que quieras echar ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/npm-vs-npx-cual-es-la-diferencia/</link>
                <guid isPermaLink="false">5fe152018c7cd154bb97c60d</guid>
                
                    <category>
                        <![CDATA[ npm ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Juan Carrillo ]]>
                </dc:creator>
                <pubDate>Tue, 12 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/npm-vs-npx-whats-the-difference-1024x538.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Si alguna vez has usado <a href="https://nodejs.org/">Node.js</a>, entonces seguro que has usado <em>npm</em>.</p><p><strong>npm</strong> (node package manager) es el gestor de dependencias/paquetes que obtienes por defecto cuando instalas Node.js. Proporciona una manera para que los desarrolladores instalen paquetes tanto a nivel global como local.</p><p>A veces puede que quieras echar un vistazo a un paquete específico y probar algunos comandos. Pero no puedes hacerlo sin instalar las dependencias en tu carpeta local de <code>node_modules</code>.</p><p>Ahí es donde entra <strong>npx</strong>.</p><p>En este artículo, vamos a echar un vistazo a las diferencias entre <strong>npm</strong> y <strong>npx</strong> y aprenderemos cómo obtener lo mejor de ambos.</p><p>En primer lugar, vamos a entender lo que npm es en realidad y lo que podemos hacer con él.</p><h2 id="el-gestor-de-paquetes-npm">El gestor de paquetes npm</h2><p>npm es un par de cosas. En primer lugar, es un repositorio en línea para la publicación de proyectos de código abierto Node.js.</p><p>Segundo, es una herramienta CLI que ayuda a instalar esos paquetes y a manejar sus versiones y dependencias. Hay cientos de miles de librerías y aplicaciones de Node.js en npm y muchas más se agregan cada día.</p><p>npm por sí mismo no tiene ningún paquete. Si quieres ejecutar un paquete usando npm, debes especificar ese paquete en tu archivo <code>package.json</code>.</p><p>Cuando los ejecutables se instalan a través de paquetes npm, npm crea enlaces a ellos:</p><ul><li>las instalaciones <strong>locales </strong>tienen enlaces creados en el directorio <code>./node_modules/.bin/</code></li><li>las instalaciones <strong>globales </strong>tienen enlaces creados desde el directorio global <code>bin/</code> (por ejemplo: <code>/usr/local/bin</code> en Linux o <code>%AppData%/npm</code> en Windows)</li></ul><p>Para ejecutar un paquete con npm tienes que escribir la ruta local, así:</p><pre><code class="language-bash">$ ./node_modules/.bin/tu-paquete</code></pre><p>o puedes ejecutar un paquete instalado localmente agregándolo a tu archivo <code>package.json</code> en la sección de scripts, así:</p><pre><code class="language-js">{
  "name": "tu-aplicacion",
  "version": "1.0.0",
  "scripts": {
    "tu-paquete": "tu-paquete"
  }
}</code></pre><p>Luego puedes ejecutar el script usando <code>npm run</code>:</p><pre><code class="language-bash">npm run tu-paquete</code></pre><p>Puedes ver que manejar un paquete con npm simple requiere bastante ceremonia.</p><p>Afortunadamente, aquí es donde <strong>npx</strong> es útil.</p><h2 id="el-ejecutor-de-paquetes-npx">El ejecutor de paquetes npx</h2><p>Desde la versión <a href="https://github.com/npm/npm/releases/tag/v5.2.0">5.2.0</a> de npm, npx está preinstalado con npm. Así que es más o menos estándar hoy en día.</p><p><strong>npx</strong> es también una herramienta CLI cuyo propósito es facilitar la instalación y la gestión de las dependencias alojadas en el registro npm.</p><p>Ahora es muy fácil ejecutar cualquier tipo de ejecutable basado en Node.js que normalmente se instalaría a través de npm.</p><p>Puedes ejecutar el siguiente comando para ver si ya está instalado para tu versión actual de npm:</p><pre><code class="language-bash">$ which npx</code></pre><p>Si no lo está, puede instalarlo así:</p><pre><code class="language-bash">$ npm install -g npx</code></pre><p>Una vez que te asegures de tenerlo instalado, veamos algunos de los casos de uso que hacen que npx sea extremadamente útil.</p><h3 id="ejecutar-un-paquete-instalado-localmente-f-cilmente">Ejecutar un paquete instalado localmente fácilmente</h3><p>Si deseas ejecutar un paquete instalado localmente, todo lo que tienes que hacer es escribir:</p><pre><code class="language-bash">$ npx tu-paquete</code></pre><p>npx comprobará si <code>&lt;comando&gt;</code> o <code>&lt;paquete&gt;</code> existe en <code>$PATH</code>, o en los binarios del proyecto local, y si es así lo ejecutará.</p><h3 id="ejecutar-los-paquetes-que-no-est-n-previamente-instalados">Ejecutar los paquetes que no estén previamente instalados</h3><p>Otra gran ventaja es la capacidad de ejecutar un paquete que no fue instalado previamente.</p><p>A veces sólo quieres usar algunas herramientas CLI pero no quieres instalarlas globalmente sólo para probarlas. Esto significa que puedes ahorrar algo de espacio en disco y simplemente ejecutarlos sólo cuando los necesites. Esto también significa que tus variables globales estarán menos contaminadas.</p><h3 id="ejecuta-c-digo-directamente-desde-github">Ejecuta código directamente desde GitHub</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/execute-gist-scripts-with-npx.jpg" class="kg-image" alt="execute-gist-script-with-npx" width="600" height="400" loading="lazy"></figure><p>Este es bastante radical.</p><p>Puedes usar npx para ejecutar cualquier gist y repositorio de GitHub. Centrémonos en ejecutar un gist de GitHub porque es más fácil crear uno.</p><p>El script más básico consiste en el archivo principal de JS y un <code>package.json</code>. Después de configurar los archivos, todo lo que tienes que hacer es ejecutar el npx con el enlace a ese gist como se muestra en la imagen de arriba.</p><p><a href="https://gist.github.com/Tynael/0861d31ea17796c9a5b4a0162eb3c1e8">Aquí</a> puedes encontrar el código que usé para este ejemplo.</p><p><strong>Asegúrate de leer atentamente cualquier script antes de ejecutarlo para evitar problemas serios que pueden ocurrir debido a código malicioso.</strong></p><h3 id="prueba-diferentes-versiones-de-los-paquetes">Prueba diferentes versiones de los paquetes</h3><p>npx hace que sea extremadamente fácil probar diferentes versiones de un paquete o módulo de Node.js. Para probar esta impresionante característica, vamos a instalar localmente el paquete <code>create-react-app</code> y probar una próxima versión.</p><p>Esto enlistará algunas etiquetas dist cerca del final de la salida. Las etiquetas dist proporcionan alias para los números de versión, lo que hace que sea mucho más fácil de escribir.</p><pre><code class="language-bash">$ npm v create-react-app</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/create-react-app-dist-tags.jpg" class="kg-image" alt="create-react-app-dist-tags" width="600" height="400" loading="lazy"></figure><p>Usemos npx para probar la etiqueta dist <code>next</code> de <code>create-react-app</code> que creará la aplicación dentro de un directorio sandbox.</p><pre><code class="language-bash">$ npx create-react-app@next sandbox</code></pre><p>npx instalará temporalmente la siguiente versión de <code>create-react-app</code>, y luego se ejecutará para andamiar la aplicación e instalar sus dependencias.</p><p>Una vez instalada, podemos navegar a la aplicación de esta manera:</p><pre><code class="language-bash">$ cd sandbox</code></pre><p>y luego empezar con este comando:</p><pre><code class="language-bash">$ npm start</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/create-react-app-npx-next-version.jpg" class="kg-image" alt="create-react-app-npx-next-version" width="600" height="400" loading="lazy"></figure><p>Se abrirá automáticamente la aplicación de React en una ventana de tu navegador predeterminado. ¡Ahora tenemos una aplicación que funciona en la próxima version del paquete <code>create-react-app</code>!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/react-app.jpg" class="kg-image" alt="index-page-react-app" width="600" height="400" loading="lazy"><figcaption>Así es como debería ser la página de índica de tu aplicación de React</figcaption></figure><h2 id="conclusi-n">Conclusión</h2><p>npx nos ayuda a evitar el versionado, los problemas de dependencia y la instalación de paquetes innecesarios que sólo queremos probar.</p><p>También proporciona una forma clara y fácil de ejecutar paquetes, comandos, módulos e incluso listas y repositorio de GitHub.</p><p>Si no has usado npx antes, ¡ahora es un buen momento para empezar!</p><p>Esto fue originalmente publicado en <a href="https://neutrondev.com/npm-vs-npx-whats-the-difference/">mi blog</a>.<br>Puedes contactarme y preguntarme cualquier cosa en <a href="https://twitter.com/pelu_carol">Twitter</a> y <a href="https://www.facebook.com/neutrondevcom">Facebook</a>.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/carol-theodor-pelu/"><strong>Carol-Theodor Pelu</strong></a> - <a href="https://www.freecodecamp.org/news/npm-vs-npx-whats-the-difference/"><strong>npm vs npx — What’s the Difference?</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué es npm? Un Tutorial para Principiantes sobre el Gestor de Paquetes de Node ]]>
                </title>
                <description>
                    <![CDATA[ Este artículo debería servir como una guía esencial todo en uno para el compañero favorito de Node.js: npm. Node.js ha estado tomando el mundo por asalto desde 2009. Cientos de miles de sistemas han sido construidos usando Node.js, lo que ha llevado a la comunidad de desarrolladores a afirmar que ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/node-js-npm-tutorial/</link>
                <guid isPermaLink="false">5fd90b748c7cd154bb977160</guid>
                
                    <category>
                        <![CDATA[ npm ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Juan Carrillo ]]>
                </dc:creator>
                <pubDate>Mon, 04 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/cover-4.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Este artículo debería servir como una guía esencial todo en uno para el compañero favorito de Node.js: npm.</p><p>Node.js ha estado tomando el mundo por asalto desde 2009. Cientos de miles de sistemas han sido construidos usando Node.js, lo que ha llevado a la comunidad de desarrolladores a afirmar que "JavaScript se está comiendo el software".</p><p>Uno de los principales factores del éxito de Node es npm - su popular gestor de paquetes, que permite a los desarrolladores de JavaScript compartir paquetes útiles como <a href="https://www.npmjs.com/package/lodash">lodash</a> y <a href="https://www.npmjs.com/package/moment">moment</a> de forma rápida y fácil.</p><p>En el momento en que estoy escribiendo este post, ¡npm ha facilitado la publicación de más de 1.3 millones de paquetes con una tasa de descarga semanal de más de 16 mil millones! Estos números son fantásticos para cualquier herramienta de software. Así que ahora hablemos de lo que es npm exactamente.</p><h2 id="-qu-es-npm">¿Qué es NPM?</h2><p>NPM – o "Node Package Manager" – es el administrador de paquetes predeterminado para el tiempo de ejecución de JavaScript Node.js.</p><p>También se conoce como "Ninja Pumpkin Mutants", "Nonprofit Pizza Makers", y una serie de otros nombres al azar que puedes explorar y probablemente puedas contribuir en <a href="https://github.com/npm/npm-expansions">npm-expansions</a>.</p><p>NPM consiste de dos partes principales:</p><ul><li>una herramienta CLI (interfaz de línea de comandos) para la publicación y descarga de paquetes, y</li><li>un <a href="https://npmjs.com">repositorio en línea</a> que alberga paquetes de JavaScript</li></ul><p>Para una explicación más visual, podemos pensar en el repositorio npmjs.com como un centro de cumplimiento que recibe paquetes de bienes de los vendedores (autores de paquetes npm) y los distribuye a los compradores (usuarios de paquetes npm).</p><p>Para facilitar este proceso, el centro de cumplimiento npmjs.com emplea un ejército de trabajadores wombats (npm CLI) que serán asignados como asistentes personales a cada cliente individual de npmjs.com. Así que las dependencias se entregan a los desarrolladores de JavaScript de esta manera:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/06/wombat-install.png" class="kg-image" alt="wombat-install" width="600" height="400" loading="lazy"></figure><p>y el proceso de publicar un paquete para tus compañeros de JS sería algo así:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/06/wombat-publish.png" class="kg-image" alt="wombat-publish" width="600" height="400" loading="lazy"></figure><p>Veamos cómo este ejército de wombats ayuda a los desarrolladores que quieren usar paquetes de JavaScript en sus proyectos. También veremos cómo ayudan a los magos del código abierto a sacar sus geniales librerías al mundo.</p><h2 id="package-json">package.json</h2><p>Cada proyecto en JavaScript – ya sea Node.js o una aplicación de navegador – puede ser enfocado como un paquete npm con su propia información de paquete y su archivo <code>package.json</code> para describir el proyecto.</p><p>Podemos pensar en <code>package.json</code> como etiquetas estampadas en esas buenas cajas de npm que nuestro ejército de Wombats entrega.</p><p><code>package.json</code> se generará cuando se ejecute <code>npm init</code> para inicializar un proyecto JavaScript/Node.js, con estos metadatos básicos proporcionados por los desarrolladores:</p><ul><li><code>name</code>: el nombre de tu librería/proyecto JavaScript</li><li><code>version</code>: la versión de tu proyecto. A menudo, para el desarrollo de aplicaciones, este campo es a menudo descuidado ya que no hay necesidad aparente de versionar librerías de código abierto. Pero aún así, puede ser útil como fuente de la versión del despliegue</li><li><code>description</code>: la descripción del proyecto</li><li><code>license</code>: la licencia del proyecto</li></ul><h3 id="npm-scripts">npm scripts </h3><p><code>package.json</code> también soporta la propiedad <code>scripts</code> que puede definirse para ejecutar herramientas de línea de comandos que se instalan en el contexto local del proyecto. Por ejemplo, la porción de scripts de un proyecto npm puede tener un aspecto similar a este:</p><pre><code class="language-json">{
  "scripts": {
    "build": "tsc",
    "format": "prettier --write **/*.ts",
    "format-check": "prettier --check **/*.ts",
    "lint": "eslint src/**/*.ts",
    "pack": "ncc build",
    "test": "jest",
    "all": "npm run build &amp;&amp; npm run format &amp;&amp; npm run lint &amp;&amp; npm run pack &amp;&amp; npm test"
  }
}</code></pre><p>con <code>eslint</code>, <code>prettier</code>, <code>ncc</code>, <code>jest</code> no necesariamente instalados como ejecutables globales sino como locales de tu proyecto dentro de <code>node_modules/.bin/</code>.</p><p>La reciente introducción de npx nos permite ejecutar estos comandos <code>node_modules</code> del proyecto al igual que un programa instalado globalmente usando el prefijo <code>npx ...</code> (es decir, `npx prettier --write **/*.ts).</p><h3 id="dependencies-vs-devdependencies">dependencies vs devDependencies</h3><p>Estos dos vienen en forma de objetos clave-valor (key-value) con los nombre de las librerías npm como clave y sus versiones en <a href="https://semver.org/">formato semántico</a> como valor. Este es un ejemplo de la <a href="https://github.com/actions/typescript-action">plantilla de Github's TypeScript Action</a>:</p><pre><code class="language-json">{
  "dependencies": {
    "@actions/core": "^1.2.3",
    "@actions/github": "^2.1.1"
  },
  "devDependencies": {
    "@types/jest": "^25.1.4",
    "@types/node": "^13.9.0",
    "@typescript-eslint/parser": "^2.22.0",
    "@zeit/ncc": "^0.21.1",
    "eslint": "^6.8.0",
    "eslint-plugin-github": "^3.4.1",
    "eslint-plugin-jest": "^23.8.2",
    "jest": "^25.1.0",
    "jest-circus": "^25.1.0",
    "js-yaml": "^3.13.1",
    "prettier": "^1.19.1",
    "ts-jest": "^25.2.1",
    "typescript": "^3.8.3"
  }
}
</code></pre><p>Estas dependencias se instalan mediante el comando <code>npm install</code> con las banderas <code>--save</code> y <code>--save-dev</code>. Están pensadas para ser usadas en entornos de producción y desarrollo/prueba respectivamente. Profundizaremos en la instalación de estos paquetes en la siguiente sección.</p><p>Mientras tanto, es importante entender los posibles signos que vienen antes de las versiones semánticas (suponiendo que hayas leído el modelo <code>major.minor.patch</code> (<code>mayor.menor.parche</code>) de <a href="https://semver.org/">semver</a>):</p><ul><li><code>^</code>: último lanzamiento menor. Por ejemplo, una especificación <code>^1.0.4</code> podría instalar la versión <code>1.3.0</code> si es la última versión menor de la serie mayor <code>1</code>.</li><li><code>~</code>: última versión del parche. De la misma manera que <code>^</code> para las versiones menores, la especificación <code>~1.0.4</code> podría instalar la versión <code>1.0.7</code> si es la última versión menor de la serie menor <code>1.0</code>.</li></ul><p>Todas estas versiones exactas del paquete se documentarán un archivo generado <code>package-lock.json</code>.</p><h3 id="package-lock-json">package-lock.json</h3><p>Este archivo describe las versiones exactas de las dependencias utilizadas en un proyecto de JavaScript npm. Si <code>package.json</code> es una etiqueta descriptiva genérica, <code>package-lock.kson</code> es una tabla de ingredientes.</p><p>Y al igual que no solemos leer la tabla de ingredientes de un producto (a menos que estés demasiado aburrido o necesites saberlo), <code>package-lock.json</code> no está pensado para ser leído línea por línea por los desarrolladores (a menos que estemos desesperados por resolver problemas de "funciona en mi máquina").</p><p><code>package-lock.json</code> es usualmente generado por el comando <code>npm install</code>, y también es leído por nuestra herramienta NPM CLI para asegurar la reproducción de los entornos de construcción para el proyecto con <code>npm ci</code>.</p><h2 id="c-mo-ordenar-efectivamente-a-npm-wombats-como-un-comprador">Cómo ordenar efectivamente a NPM Wombats como un "comprador"</h2><p>Como se deduce de los 1.3 millones de paquetes publicados frente a los 16,000 millones de descargas mencionadas anteriormente, la mayoría de los usuarios de npm utilizan npm en esta dirección. Así que es bueno saber cómo manejar esta poderosa herramienta.</p><h3 id="npm-install">npm install</h3><p>Este es el comando más utilizado en el desarrollo de aplicaciones JavaScript/Node.js hoy en día.</p><p>Por defecto, <code>npm install &lt;nombre del paquete&gt;</code> instalará la última versión con el signo <code>^</code>. Un <code>npm install</code> dentro del contexto de un proyecto npm descargará los paquetes en la carpeta <code>node_modules</code> del proyecto según las especificaciones de <code>package.json</code>, actualizando la versión del paquete (y a su vez regenerando <code>package-lock.json</code>) donde pueda basándose en la coincidencia de las versiones <code>^</code> y <code>~</code>.</p><p>Puedes especificar una bandera global <code>-g</code> si deseas instalar un paquete en el contexto global que puedes utilizar en cualquier lugar de tu máquina (esto es común para los paquetes de herramientas de línea de comandos como <a href="https://github.com/tapio/live-server">live-server</a>).</p><p>npm ha hecho la instalación de los paquetes de JavaScript tan fácil que este comando se utiliza a menudo de forma incorrecta. Esto resulta en que npm es el blanco de muchas bromas de programadores como estas:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/06/npm-jokes.png" class="kg-image" alt="npm-jokes" width="600" height="400" loading="lazy"></figure><p>¡Aquí es donde la bandera <code>--production</code> viene al rescate! En la sección anterior, discutimos las <code>dependencies</code> y <code>devDependencies</code> destinadas a ser usadas en entornos de producción y desarrollo/prueba respectivamente. Esta bandera de <code>--production</code> es la forma en que se hacen las diferencias en <code>node_modules</code>.</p><p>Al adjuntar esta bandera al comando <code>npm install</code>, sólo instalaremos paquetes de <code>dependencies</code>, reduciendo así drásticamente el tamaño de nuestros <code>node_modules</code> a lo que sea absolutamente necesario para que nuestras aplicaciones estén en funcionamiento.</p><p>Al igual que cuando los niños y niñas exploradoras no trajeron exprimidores de limón a nuestra cabina de limonada, ¡No deberíamos llevar las <code>devDependencies</code> a producción!</p><h3 id="npm-ci">npm ci</h3><p>Así que si <code>npm install --production</code> es óptimo para un entorno de producción, ¿Debe haber un comando que sea óptimo para mi desarrollo local, probando la configuración?</p><p>La respuesta es <code>npm ci</code>.</p><p>Al igual que si <code>package-lock.json</code> no existe ya en el proyecto que se genera cada vez que se llama <code>npm install</code>, <code>npm ci</code> consume este archivo para descargar la versión exacta de cada paquete individual del que depende el proyecto.</p><p>Así es como podemos asegurarnos de que el contexto de nuestro proyecto se mantiene exactamente igual en las diferentes máquina, ya sean nuestras laptops utilizados para el desarrollo o CI (Integración Continua) como GitHub Actions.</p><h3 id="npm-audit">npm audit</h3><p>Con el enorme número de paquetes que se han publicado y que pueden ser fácilmente instalados, los paquetes npm son susceptibles a los malos autores con intenciones maliciosas.</p><p>Al darse cuenta de que había un problema en el ecosistema, la organización npm.js tuvo la idea de <code>npm audit</code>. Mantienen una lista de lagunas de seguridad para que los desarrolladores puedan auditar sus dependencias con el uso del comando <code>npm audit</code>.</p><p><code>npm audit</code> da a los desarrolladores información sobre las vulnerabilidades y si hay versiones con correcciones a las que actualizar. Por ejemplo,</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/06/npm-audit-result.png" class="kg-image" alt="npm-audit-result" width="600" height="400" loading="lazy"></figure><p>Si las correcciones están disponibles en las próximas actualizaciones de versiones que no sean de última hora, se puede utilizar <code>npm audit</code> para actualizar automáticamente las versiones de las dependencias afectadas.</p><h2 id="c-mo-ordenar-efectivamente-a-npm-wombats-como-un-vendedor">Cómo ordenar efectivamente a NPM Wombats como un "vendedor"</h2><p>Hemos repasado cómo manejar la herramienta NPM CLI como consumidor, pero ¿Qué tal si la usamos efectivamente como autor (y potencialmente nos convertimos en un mago del código abierto de JavaScript)?</p><h3 id="npm-publish">npm publish</h3><p>Enviar un paquete a nuestro centro de cumplimiento de <a href="https://npmjs.com">npmjs.com</a> es súper fácil ya que sólo tenemos que ejecutar <code>npm publish</code>. La parte difícil, que <strong>no</strong> es específica de los autores de los paquetes de npm, es determinar la versión del paquete.</p><p>La regla empírica según <a href="https://semver.org">semver.org</a>:</p><ol><li>Versión MAYOR cuando haces cambios incompatibles en la API,</li><li>Versión MENOR cuando se agrega la funcionalidad de una manera compatible con el pasado, y</li><li>Versión PARCHE cuando haces correcciones de errores compatibles con el pasado.</li></ol><p>Es aún más importante seguir la regla anterior cuando publiques tus paquetes para asegurarte de que no estás rompiendo el código de nadie ya que la versión por defecto que coincide en npm es <code>^</code> (también conocida como la siguiente versión menor).</p><h2 id="-npm-javascript-node-js-">❤️ npm ❤️ JavaScript ❤️ Node.js ❤️</h2><p>¡Eso es todo lo que necesitamos saber para empezar a manejar npm efectivamente y ordenar nuestro encantador ejército de wombats!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/06/wombats.png" class="kg-image" alt="wombats" width="600" height="400" loading="lazy"></figure><p>Traducido del artículo de<strong> <a href="https://www.freecodecamp.org/news/author/stanley/">Stanley Nguyen</a> </strong>- <a href="https://www.freecodecamp.org/news/what-is-npm-a-node-package-manager-tutorial-for-beginners/"><strong>What is npm? A Node Package Manager Tutorial for Beginners</strong></a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
