Inicializar un proyecto

$ npm init -y //inicializa reyenando de manera rapida
$ npm init /*inicializa el proyecto y manda
package name: (npm-course)
version: (1.0.0)
description: Proyecto del curso de npm de platzi
entry point: (index.js) src/index.js
test command:
git repository:
keywords: javascript, node, package,
author: Adrian Garcia <garciasaaib@gmail.com>
license: (ISC) MIT
*/
$ npm set init.author.email "garciasaaib@gmail.com"
$ npm set init.author.name "Adrian Garcia"
$ npm set init.author.twitter "@adreanzoe"
$ npm set init.license "MIT"
$ npm init -y

Instalacion de packages

npm i moment -S //package para produccion --save
npm i nodemon -D //package solo para desarrollo --save-dev
npm i nodemon -g //package de manera --global 
npm i nodemon -O //package instalado y declarado en opcionalDependences
npm i //instala los packages desde package.json

npm i react --dry-run //simula la instalacion del package, solo nos da el output
npm i webpack -f //package instalado desde el ultimo recurso --force

npm i json-server@0.15.0 //instala el package en una version especifica
npm i json-server@latest //instala la ultima version del package
npm update //actualiza la version de los packages que se les es permitido en package.json

//hay algunos packages que tienen partes que es necesario donar para usarlas
npm i eslint -D //eslint se puede usar parcialmente
npm fund //de esta manera vemos como podemos donar

npm list -g --depth 0 //lista de los packages globales
npm list //lista los packages instalados y su gerarquia, aunque esto no importe en el desarrollo
npm outdate //packetes instalados que estan desactualizados
npm outdate --dd // --dd nos permite ver los logs de lo que va haciendo el comando
//crea el .gitignore y agrega escrito node_modules

npm uninstall json-server //desinstalar el package en el proyecto}
npm uninstall json-server --no-save //desinstalar el package del node_modules pero no del package.json

Esta extención de permite ver si algun package no esta siendo usado

Package.json

/*Versiones de dependencias*/
"@babel/core": "3.2.1" // sin nada mas, instala exactamente esta version
//la posicion 1 significa los bugs arreglados
//la posicion 2 significa mejoras en el package que a veces si son cambios fuertes
//la posicion 3 significa cambios mayores, cosas que cambian radicalmente el package

"@babel/core": "^7.7.2" // ^ actualiza la posicion 2: mejoras y bugs
"@babel/core": "~7.7.2" // ~ actualiza la posicion 1: solo bugs

< : Versión menor a la indicada.
<= : Versión menor o igual a la indicada.
> : Versión mayor a la indicada.
>= : Versión mayor o igual a la indicada.

/*Scripts: ejecutables mediante terminal*/
"build": "webpack --mode production",
"start": "webpack-dev-server --open --mode development --port 3002",
"format": "prettier --write '{*.js,src/**/*.{js,jsx}}'", //establece el formato
"lint": "eslint src/ --fix", //pone eslint al proyecto
"hola": "node", // comando que habilita el cli de node
"deploy": "npm run format && npm run build", //comando que corre dos comandos
"serve": "serve ./dist -s -l 8080"

$ npm test // corre los test por defecto
$ npm start // corre el programa por defecto

/*Puedes también especificar scripts con el prefijo “pre” que se ejecutarán 
automáticamente antes del comando que ejecutaste. Por ejemplo, si defines el comando 
build y prebuild, cuando corras npm run build el comando prebuild se ejecutará primero. 
Esto sirbe para poder ejecutar tareas que hagan algún tipo de preparación necesaria para 
correr el comando principal. Sin embargo, hay que hacer notar que si el comando pre falla 
(retorna un valor que no es 0) el comando principal no se ejecutará. Esto es algo bueno 
ya que si nuestro proceso de preparación no se realiza de forma exitosa, 
puede que tengamos problemas al querer ejecutar la tarea principal.

En algunas ocaciones, sin embargo, la tarea previa puede fallar sin que eso 
afecte la ejecución de la tarea principal. 
En esos casos puedes usar || exit 0 para retornar 0*/
"prebuild": "",
"build": ""

Problemas con npm

/*Ejemplo sintax error*/
"build": "webpac --mode production" //error wepack mal escrito 

$ npm run build //nos mostrara un error y debemos interpretar por la respuesta
$ npm run build --dd //podemos indagar mas en el problema para ver donde esta el error

/*este documento es un log del error y ahi vemos detalles del mismo

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\\Users\\adran\\AppData\\Roaming\\npm-cache\\_logs\\2020-10-16T05_41_23_260Z-debug.log*/

$ code C:\\Users\\adran\\AppData\\Roaming\\npm-cache\\_logs\\2020-10-16T05_41_23_260Z-debug.log
/*Ejemplo module error - Limpiar cache*/
$ npm cache clean --force //elimina el cache
$ npm cache verify //verificar que no tenemos cache
// elimina la carpeta node_modules
$ npm i

$ npm i -g rimraf //package para eliminar de manera segura
$ rimraf node_modules
$ ls

Seguridad NPM

/*Analizar que contiene*/
$ npm audit //encontrar vulnerabilidades
$ npm audit --json //crea un json
$ npm update eslint-utils --depth 2 //actualizar libreria
$ npm audit fix //arreglar todas las vulnerabilidades

OpenSource

//src/index.js
const messages = [ //string de mensajes
    "Adrian", "Nico", "Diego", "Laura",
    "Jessica", "Paola","America"
]
const randomMsg = () => { //random message in console
    const message = messages[Math.floor(Math.random() * messages.length)]
    console.log(message)
}
module.exports = { randomMsg }; //exporta esto

//bin/global.js  configuracion del paquete que queremos sea instalado de forma global
#!/usr/bin/env node //declaramos qe este paquete se ejecuta en bash
let random = require('../src/index.js') //obtenemos el modulo qe creamos
random.randomMsg() //ejecutamos el comando 

"bin": { //direccion de la informacion esta aqui
	"random-msg": "./bin/global.js"
},
"preferGlobal": true //debe instalarse global

$ npm link

$ npm adduser //ingresar con tu cuenta npm

Snyk | Developer Security | Develop Fast. Stay Secure.