Dependencias

Instalando dependencias

Ejemplo:

➜  package-test -> npm install signale
npm WARN project-test@0.1.0 No repository field.

+ signale@1.4.0
updated 1 package and audited 24 packages in 1.785s
found 0 vulnerabilities

Se actualizó package.json:

{
  "name": "project-test",
  "version": "0.1.0",
  "description": "Project test",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Danilo Mérida",
  "license": "MIT",
  "dependencies": {
    "signale": "^1.4.0"
  }
}

Echemos un vistazo a la carpeta node_modules y veamos el árbol de dependencias:

➜  package-test -> ls -lah node_modules
total 0
drwxr-xr-x  26 danimerida2000  staff   832B Aug 25 19:57 .
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:49 ..
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 ansi-styles
drwxr-xr-x   9 danimerida2000  staff   288B Aug 25 19:29 chalk
drwxr-xr-x   9 danimerida2000  staff   288B Aug 25 19:29 color-convert
drwxr-xr-x   9 danimerida2000  staff   288B Aug 25 19:29 color-name
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 error-ex
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 escape-string-regexp
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 figures
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 find-up
drwxr-xr-x   9 danimerida2000  staff   288B Aug 25 19:29 graceful-fs
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 has-flag
drwxr-xr-x  10 danimerida2000  staff   320B Aug 25 19:29 is-arrayish
drwxr-xr-x   7 danimerida2000  staff   224B Aug 25 19:29 json-parse-better-errors
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 load-json-file
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 locate-path
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 p-limit
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 p-locate
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 p-try
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 parse-json
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 path-exists
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 pify
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 pkg-conf
drwxr-xr-x   8 danimerida2000  staff   256B Aug 25 19:57 signale
drwxr-xr-x   6 danimerida2000  staff   192B Aug 25 19:29 strip-bom
drwxr-xr-x   7 danimerida2000  staff   224B Aug 25 19:29 supports-color
➜  package-test -> npm ls
project-test@0.1.0 /Users/danimerida2000/Downloads/package-test
└─┬ signale@1.4.0
  ├─┬ chalk@2.4.2
  │ ├─┬ ansi-styles@3.2.1
  │ │ └─┬ color-convert@1.9.3
  │ │   └── color-name@1.1.3
  │ ├── escape-string-regexp@1.0.5
  │ └─┬ supports-color@5.5.0
  │   └── has-flag@3.0.0
  ├─┬ figures@2.0.0
  │ └── escape-string-regexp@1.0.5 deduped
  └─┬ pkg-conf@2.1.0
    ├─┬ find-up@2.1.0
    │ └─┬ locate-path@2.0.0
    │   ├─┬ p-locate@2.0.0
    │   │ └─┬ p-limit@1.3.0
    │   │   └── p-try@1.0.0
    │   └── path-exists@3.0.0
    └─┬ load-json-file@4.0.0
      ├── graceful-fs@4.2.8
      ├─┬ parse-json@4.0.0
      │ ├─┬ error-ex@1.3.2
      │ │ └── is-arrayish@0.2.1
      │ └── json-parse-better-errors@1.0.2
      ├── pify@3.0.0
      └── strip-bom@3.0.0

Si existiese 2 versiones en el árbol de dependencias puede almacenar una carpeta node_modules anidada.

Dependencias de desarrollo

Para instalar una dependencia de desarrollo, ejecutamos npm install --save-dev nombre_paquete.

Ejemplo:

➜  package-test -> npm install --save-dev json-loader
npm WARN project-test@0.1.0 No repository field.

+ json-loader@0.5.7
added 1 package from 1 contributor and audited 25 packages in 2.697s
found 0 vulnerabilities
➜  package-test -> cat package.json
{
  "name": "project-test",
  "version": "0.1.0",
  "description": "Project test",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Danilo Mérida",
  "license": "MIT",
  "dependencies": {
    "signale": "^1.4.0"
  },
  "devDependencies": {
    "json-loader": "^0.5.7"
  }
}
➜  package-test -> npm ls
project-test@0.1.0 /Users/danimerida2000/Downloads/package-test
├── json-loader@0.5.7
└─┬ signale@1.4.0
  ├─┬ chalk@2.4.2
  │ ├─┬ ansi-styles@3.2.1
  │ │ └─┬ color-convert@1.9.3
  │ │   └── color-name@1.1.3
  │ ├── escape-string-regexp@1.0.5
  │ └─┬ supports-color@5.5.0
  │   └── has-flag@3.0.0
  ├─┬ figures@2.0.0
  │ └── escape-string-regexp@1.0.5 deduped
  └─┬ pkg-conf@2.1.0
    ├─┬ find-up@2.1.0
    │ └─┬ locate-path@2.0.0
    │   ├─┬ p-locate@2.0.0
    │   │ └─┬ p-limit@1.3.0
    │   │   └── p-try@1.0.0
    │   └── path-exists@3.0.0
    └─┬ load-json-file@4.0.0
      ├── graceful-fs@4.2.8
      ├─┬ parse-json@4.0.0
      │ ├─┬ error-ex@1.3.2
      │ │ └── is-arrayish@0.2.1
      │ └── json-parse-better-errors@1.0.2
      ├── pify@3.0.0
      └── strip-bom@3.0.0

Dependencias de producción

Para ignorar las dependencias de desarrollo, usamos el flag --production.

Ejemplo:

➜  package-test -> npm install --production
npm WARN project-test@0.1.0 No repository field.

added 24 packages from 6 contributors and audited 25 packages in 1.119s
found 0 vulnerabilities
➜  package-test -> npm ls
project-test@0.1.0 /Users/danimerida2000/Downloads/package-test
└─┬ signale@1.4.0
  ├─┬ chalk@2.4.2
  │ ├─┬ ansi-styles@3.2.1
  │ │ └─┬ color-convert@1.9.3
  │ │   └── color-name@1.1.3
  │ ├── escape-string-regexp@1.0.5
  │ └─┬ supports-color@5.5.0
  │   └── has-flag@3.0.0
  ├─┬ figures@2.0.0
  │ └── escape-string-regexp@1.0.5 deduped
  └─┬ pkg-conf@2.1.0
    ├─┬ find-up@2.1.0
    │ └─┬ locate-path@2.0.0
    │   ├─┬ p-locate@2.0.0
    │   │ └─┬ p-limit@1.3.0
    │   │   └── p-try@1.0.0
    │   └── path-exists@3.0.0
    └─┬ load-json-file@4.0.0
      ├── graceful-fs@4.2.8
      ├─┬ parse-json@4.0.0
      │ ├─┬ error-ex@1.3.2
      │ │ └── is-arrayish@0.2.1
      │ └── json-parse-better-errors@1.0.2
      ├── pify@3.0.0
      └── strip-bom@3.0.0

Semantic Versioning (SemVer)

Fundamentalmente está compuesto por 3 números separados por puntos.

Major.Minor.Patch

La razón de que se actualice el número de versión es para indicar que hubo cambios en el paquete.

Versionamiento

  • Major: Cambios que rompen una API o es incompatible con versiones anteriores.

  • Minor: Indica que hubieron cambios de extensión de funcionalidades, pero garantizando retrocompatibilidad, no debería de afectar el paquete.

  • Patch: Corrección de errores (bugs).

Por predeterminado npm install utiliza el prefijo circunflejo o signo de intercalación (^) cuando instala una nueva dependencia y lo guarda en package.json.

Símbolo

Versiones

Etapa

Observaciones

1.0.0

Primer release

Inicia con 1.0.0

Virgulilla (~)

1.0 - 1.0.x - ~1.0.1

Patch release

Compatibilidad con versiones anteriores; la solución de errores (bugs).

Circunflejo (^)

1.x.x (1.minor.patch)

Minor release

No es lo mismo ^0.0.0 con 0.x.x, en npm existen ciertos rangos como ^1.2.3 ^0.2.5 ^0.0.4; compatibilidad con versiones anteriores y nuevas funcionalidades.

* - x

Major release

Incrementa el primer dígito, y resetea los demás a 0; cambios disruptivos sin garantizar compatibilidad con versiones anteriores.

Especificación

  1. Software que utilicen el versionamiento semántico debe declararse como una API pública.

  2. No deben ser enteros negativos, ni contener ceros iniciales, cada elemento debe incrementar numéricamente.

  3. Una vez versionado el paquete, no puede modificarse, para ello debe generarse una nueva versión.

  4. Para iniciar la fase de desarrollo, considerar la versión major (0.x.x) y no se debe considerar una versión estable.

  5. Después de publicar la primer versión estable (1.0.0), el incremento de los elementos (1.x.x) dependen de los cambios que se hagan.

  6. La versión Patch (major.x.x > 0), debe incrementar con la solución de errores (bugs) que sean compatibles con la versión.

  7. La versión Minor, debe incrementar, si hay nuevas funcionalidades o si alguna funcionalidad se marcó como obsoleto (deprecated), hay que considerar el reseteo del elemento Patch a 0.

  8. La versión Major, debe incrementar si hay cambios incompatibles, los elementos Minor y Patch se deben resetear a 0.

Ejemplos: https://regex101.com/r/vkijKf/1/

Last updated

Was this helpful?