yml with tutorial travis nodejs how generate example create node.js npm travis-ci yarnpkg

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