node.js - with - travis yml example nodejs
Debería tener Travis cache node_modules o $ HOME/.npm (2)
Noté que el almacenamiento en caché de la carpeta node_modules
causó problemas (la compilación falla), mientras que el almacenamiento en caché del caché .npm
evitó. Creo que es porque el caché .npm
no almacena módulos nativos compilados mientras que la carpeta node_modules
sí lo hace. Entonces, cuando prueba diferentes versiones de node
, como es común en Travis-CI, intentará cargar un módulo nativo compilado para, por ejemplo, el node
4 en el node
6 y barf.
Estoy bastante confundido acerca de qué directorio es óptimo para el almacenamiento en caché. Los he visto usados y recomendados, pero no tengo una comparación real de por qué ir de un modo u otro.
Por ejemplo, el itself blog Travis recomienda:
cache:
directories:
- node_modules
Sin embargo, miles de lugares usan esto en su lugar:
cache:
directories:
- $HOME/.npm
Entonces, ¿por qué usar uno sobre el otro y por qué no incluir ambos?
Seguimiento de la respuesta de @John.
Para cumplir estrictamente con las dependencias de package-lock.json
en package-lock.json
, el proceso de instalación npm en Travis CI ahora tiene como valor predeterminado el nuevo npm ci
( ci
significa integración continua, creo) en lugar de la npm install
. Esto ayuda a evitar la instalación de paquetes que no siguen las versiones semánticas adecuadas.
Para hacer esto, npm ci
primero debe deshacerse del gráfico de dependencia y de todos los módulos compilados en caché en node_modules
de las compilaciones anteriores para reestructurar el gráfico de dependencia. Lo hace eliminando los node_modules
completo antes de comenzar sus propias instalaciones. Pero eso también significa que node_modules
ya no se puede usar como ubicación de caché en Travis. Ahora debemos usar "$HOME/.npm"
para el caché, y @John ha explicado la razón usando "$ HOME / .npm". Travis le enviará un error al quejarse "/node_modules/.bin/npm cannot be found"
si continúa usando node_modules
como ubicación de caché, ya que node_modules
se ha eliminado al ejecutar npm ci
.
Ahora con respecto a qué ubicación de caché utilizar ...
1. "$ HOME / .npm"
Cuando desee utilizar el npm ci
ahora predeterminado, incluya estos cambios en su .travis.yml
# [optional] `npm ci` is now default on Travis
install:
- npm ci
# Keep the npm cache around to speed up installs
cache:
directories:
- "$HOME/.npm"
2. "node_modules"
Si desea atenerse a la antigua npm install
# Specify `npm install`
install:
- npm install
# Continue to use the old cache location
cache:
directories:
- "node_modules"
Advertencia: la ubicación de la memoria caché se usa estrictamente de acuerdo con el método de instalación, y no se puede entrelazar con otro. De lo contrario, perdería los beneficios del almacenamiento en caché o, peor aún, una compilación de Travis fallida. Espero que esto haya respondido a tu pregunta.
Puede encontrar más información sobre npm ci
en el documento oficial