On Github davecarter / npm-meetup
Por Joan León y David Garcia
Schibsted Spaincurl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bashNVM Repo
$ > nvm ls-remote
$ > nvm install v6.0.0Las versiones pares son las LTS
$ > nvm list v4.3.1 v4.4.1 -> v5.0.0 v5.2.0 v6.0.0
$ > nvm use v6.0.0
$ > nvm alias miProyecto 6 $ > miProyecto -> 6 (-> v6.0.0)nvm alias default > setea versión por defecto
$ > nvm unalias miProyecto 6 $ > miProyecto -> 6 (-> v6.0.0)
$ > nvm install 6.0.0 --reinstall-packages-from 5.0.0$ > nvm which 6.0.0 - Indica la ruta de instalación
Inicializar un proyecto npm
$ > npm init $ > npm init -y // Sin asistenteLanza asistente de creación de package.json si no añadimos el flag -y
Estructura del package.json
{ "name": "@schibstedspain/sui-card", "version": "7.1.0", "main": "dist/", "scripts": { "dist": "npm run dist:scripts && npm run dist:styles", "test": "mocha --compilers js:babel-core/register --recursive", }, "dependencies": { "classnames": "2.2.0" }, "devDependencies": { "@schibstedspain/sui-multimedia": "0.1", } }Ejemplo resumido de archivo de meta-datos del proyecto npm
Instalación de paquetes npm
$ > npm install [nombre del package] $ > npm install [nombre del package]@3.4.12 // Versión específica $ > npm i [nombre del package] // shortcutprueba $ > npm isntall
Instalación de paquetes locales
$ > npm install [nombre del package] -S $ > npm install [nombre del package] --saveAñadimos como dependencia en package.json
Instalación de paquetes como dependencia de desarrollo
$ > npm install [nombre del package] -D $ > npm install [nombre del package] --save-devAñadimos como dependencia de desarrollo en package.json
Instalación de paquetes globales
$ > npm install [nombre del package] -g $ > npm install [nombre del package] --globalEstará disponible a nivel de usuario
Instalación de múltiples paquetes
$ > npm install [package1] [package2] [package3] --saveTambién podemos añadir múltiples argumentos
Actualización de paquetes
$ > npm update [package]Obtenemos la versión más reciente del repositorio de npm
Desinstalación de paquetes
$ > npm uninstall [package] // sólo borramos carpeta node_modules $ > npm uninstall [package] --save // eliminamos dep $ > npm uninstall [package] --save-dev // eliminamos devDep $ > npm un [package]Utiliza el flag --save o --save-dev para eliminarlo del package.json
Enlazar paquetes locales
$ > npm link // En el paquete a enlazar $ > npm link [package] // En el paquete que carga la dependenciaCrea un Symlink a la carpeta node_modules local ...a veces no funciona :( ...acepta un único nivel de recursividad
Desenlazar paquetes
$ > npm unlink // En el paquete a desenlazar $ > npm unlink [package] // En el paquete que cargaba la dependenciaAl desenlazar un paquete necesitaremos volver a ejecutar npm install
Publicar un paquete a npm
$ > npm publishUn paquete no puede volver a re-publicarse con la misma versión Si despublicas un paquete puedes romper Internet
Mostrar información de un paquete
$ > npm view [package] $ > npm view [package] versionsLee metadatos del package.json
Ejecutar un script
"scripts": { "sass": "node-sass -o dist/css src/scss" } $ > npm run sassMediante 'npm run [script]' podemos ejecutar scripts definidos en el package.json
Agrupando scripts
"scripts": { "lint:sass": "sass-lint src/**/*.scss -c -v", "lint:js": "eslint src/js/**/*.js", "lint": "npm run lint:sass && npm run lint:js" } $ > npm run lint $ > npm run lint:sass $ > npm run lint:js'npm run lint' ejecutaría 'npm run lint:sass' y 'npm run lint:js'
npm Start
"scripts": { "start": "npm run start:open && npm run start:server", "start:server": "webpack-dev-server", "start:open": "opener http://localhost:8080" } $ > npm run start $ > npm startscript standar para lanzar un proyecto npm 'npm start' no necesita especificar 'run'
ciclo de ejecución de scripts
"scripts": { "predist": "rimraf ./dist/*", "dist": "webpack", "postdist": "copyfiles ./dist/* ./docs/ && gh-pages -d docs" } $ > npm run distnpm buscará scripts con prefijos 'pre' y 'post' y si existen los ejecutará antes y después respectivamente
Instalación de node-sass
"scripts": { "css": "node-sass -o dist/css src/scss --output-style compressed --source-map-embed" } $ > npm install node-sass --save-dev $ > npm run cssnode-sass es un wrapper de 'LibSass' sobre node que nos permite preprocesar archivos '.scss'
Instalación de autoprefixer
"scripts": { "autoprefixer": "postcss -u autoprefixer --autoprefixer.browsers '> 5%, ie 9' -r dist/css/*" } $ > npm install autoprefixer postcss-cli --save-dev $ > npm run autoprefixernode-sass es un wrapper de 'LibSass' sobre node que nos permite preprocesar archivos '.scss'
Instalación de BabelJS
"scripts": { "build:js": "babel src/js --out-dir dist/js" } $ > npm install babel-cli babel-preset-es2015 --save-dev $ > npm run build:jsBabelJS es un transpiler de archivos JS que nos permite utilizar versiones futuras de Javascript Instala en la raiz de tu proyecto un archivo .babelrc con la configuración
Linting de Sass y Javascript con Eslint
"scripts": { "lint:sass": "sass-lint src/**/*.scss -c -v", "lint:js": "eslint src/js/**/*.js", "lint": "npm run lint:sass && npm run lint:js" } $ > npm install eslint sass-lint babel-eslint --save-dev $ > npm run lintEslint es un potente linter que soporta Sass, JS y JSX Instala en la raiz de tu proyecto un archivo .eslintrc.json con la configuración Instala en la raiz de tu proyecto un archivo .sass-lint.yml con la configuración
Test unitarios con MochaJS y Chai
"scripts": { "test": "mocha --compilers js:babel-register", "test:watch": "mocha --compilers js:babel-register --watch" } $ > npm install mocha chai --save-dev $ > npm run test $ > npm run test:watch // modo TDDMochaJS es un framework de test unitarios. Además instalaremos la librería de aserciones Chai
Pre-commit hook
"pre-commit": [ "lint", "test" ] $ > npm install precommit-hook --save-devEl pre-commit hook no nos permitirá publicar a github si no pasamos las reglas especificadas por los linters
Watching sass, js y html
"scripts": { "watch:css": "onchange src/scss/*.scss -- npm run build:css", "watch:js": "onchange src/js/*.js -- npm run build:js", "watch:html": "onchange dist/*.html -- npm run serve" } $ > npm install onchange --save-dev $ > npm run watch:css $ > npm run watch:js $ > npm run watch:htmlOnChange nos permite detectar cambios en archivos para poder lanzar scripts npm
Recargando el navegador con BrowserSync
"scripts": { "serve": "browser-sync start --server dist --files dist", "dev": "parallelshell 'npm run watch:css' 'npm run watch:js' 'npm run serve'" } $ > npm install browser-sync parallelshell --save-dev $ > npm run devParallelShell nos permite tener múltiples procesos ejecutándose al mismo tiempo