npm - how - yarn quick start
¿Debo confirmar los archivos yarn.lock y package-lock.json? (7)
Estamos utilizando hilo para todas nuestras instalaciones deterministas de paquetes, pero no evitamos que el usuario use npm; sin embargo, supongo que tener estos dos archivos causará problemas. ¿Debería agregarse a su directorio .gitignore?
Siempre confirme los archivos de bloqueo de dependencia en general
Como se trata en otra parte, los archivos de bloqueo de dependencia, que son compatibles con muchos sistemas de administración de paquetes (por ejemplo: composer y bundler ), deben comprometerse con la base de código en los proyectos de fin de cadena, de modo que cada individuo que intente ejecutar ese proyecto lo haga así que exactamente con el conjunto de dependencias probado.
Está menos claro si los archivos de bloqueo siempre deben confirmarse en paquetes que están destinados a ser incluidos en otros proyectos (donde son deseables dependencias más flexibles).
Sin embargo, tanto
Yarn
como NPM (según lo cubierto por @Cyrille) ignoran de manera inteligente
yarn.lock
y
package-lock.json
respectivamente cuando sea necesario, por lo que es seguro comprometer siempre estos archivos de bloqueo.
Por lo tanto,
siempre
debe
confirmar al menos uno de
yarn.lock
o
package-lock.json
según el administrador de paquetes que esté utilizando.
¿Deberías comprometer yarn.lock y package-lock.json?
En la actualidad, tenemos dos sistemas de administración de paquetes diferentes, que instalan
el mismo conjunto de dependencias
de
package.json
, pero que generan y leen desde dos archivos de bloqueo diferentes.
NPM 5 genera
package-lock.json
, mientras que Yarn genera
yarn.lock
.
Si confirma
package-lock.json
entonces está
package-lock.json
soporte para las personas que instalan sus dependencias con NPM 5. Si confirma
yarn.lock
, está
yarn.lock
soporte para las personas que instalan dependencias con Yarn.
Si elige comprometer
yarn.lock
o
package-lock.json
o ambos, depende de si los que desarrollan su proyecto solo usan Yarn o NPM 5 o ambos.
Si su proyecto es de código abierto, lo más amigable para la comunidad probablemente sería comprometer ambos y tener un proceso automatizado para garantizar que
yarn.lock
y
package-lock.json
siempre
package-lock.json
sincronizados.
Actualización:
Yarn ahora ha introducido
un comando de
import
que generará un archivo
yarn.lock
partir de un archivo
package-lock.json
.
Esto podría ser útil para mantener los dos archivos sincronizados.
(Gracias @ débil)
Estos temas se discutieron extensamente en el proyecto Yarn en:
- "Idea: soporte package-lock.json de npm 5"
- "Los archivos de bloqueo de la competencia crean UX deficiente"
Ambos están ahora cerrados.
¡Estás en lo correcto!
Permitir que se
npm
tanto
npm
como
yarn
va a causar problemas.
Echa un vistazo a
este artículo
.
Actualmente, estamos planeando agregar algunas advertencias a los usuarios que usan
yarn
ynpm
en el mismo repositorio para instalar paquetes.Le recomendamos que elimine el archivo
package-lock.json
si decide usar hilo para evitar futuras confusiones y posibles problemas de consistencia.
Es posible que no desee tanto
npm
como
yarn
como administrador de paquetes.
Debe confirmar 1 archivo de bloqueo de árbol de dependencia, pero no debe confirmar ambos. Esto también requiere estandarizar en hilo o npm (no en ambos) para construir + desarrollar un proyecto.
Si confirma tanto el archivo
yarn.lock
archivos
package-lock.json
, hay muchas formas en que los 2 archivos pueden proporcionar diferentes árboles de dependencia (incluso si los algoritmos de resolución de árbol de yarn y npm son idénticos), y no trivial para garantizar que brinden exactamente la misma respuesta.
Dado que no es trivial, es poco probable que se mantenga el mismo árbol de dependencias en ambos archivos, y no desea un comportamiento diferente dependiendo de si la compilación se realizó utilizando hilo o npm.
Si y cuando yarn cambia de usar
yarn.lock
a
package-lock.json
(
problema aquí
), la elección del archivo de bloqueo para confirmar se vuelve fácil, y ya no tenemos que preocuparnos de que yarn y npm resulten en diferentes compilaciones.
Según esta publicación de blog
, este es un cambio que no deberíamos esperar pronto (la publicación de blog también describe las diferencias entre
yarn.lock
y
package-lock.json
.
Esta es mi regla general: si está trabajando en una aplicación, confirme los archivos de bloqueo.
Si mantiene una biblioteca, agréguela a su lista ignorada.
De cualquier manera, debería usar rangos de semver precisos en
package.json
.
Yehuda Katz
(en
cached
) escribió una gran explicación sobre cuándo cometer
Gemfile.lock
(archivo de bloqueo de Ruby) y cuándo no hacerlo.
Al menos lea la sección tl; dr.
Estaba pensando en la misma pregunta. Aquí están mis pensamientos, espero que ayude:
La documentación de npm package-lock.json dice lo siguiente:
package-lock.json se genera automáticamente para cualquier operación en la que npm modifique el árbol node_modules o package.json. Describe el árbol exacto que se generó, de modo que las instalaciones posteriores pueden generar árboles idénticos, independientemente de las actualizaciones de dependencia intermedias.
Esto es genial porque evita el efecto "funciona en mi máquina".
Sin este archivo, si
npm install --save A
, npm agregará
"A": "^1.2.3"
a su
package.json
.
Cuando alguien más ejecuta
npm install
en su proyecto, es posible que se haya lanzado la versión
1.2.4
de
A
Como es la última versión disponible que satisface el rango de semver especificado en su
package.json
, instalará esta versión.
Pero, ¿qué pasa si hay un nuevo error introducido en esta versión?
Esta persona tendrá un problema que no puede reproducir porque tiene la versión anterior, sin ningún error.
Al arreglar el estado de su directorio
node_modules
, el archivo
package-lock.json
previene este problema porque todos tendrán las mismas versiones de cada paquete.
Pero, ¿qué pasa si estás escribiendo y publicando un módulo npm? La documentación dice lo siguiente:
Un detalle clave sobre package-lock.json es que no se puede publicar, y se ignorará si se encuentra en otro lugar que no sea el paquete de nivel superior.
Entonces, incluso si lo confirma, cuando el usuario instala su módulo, no obtendrá el archivo
package-lock.json
, sino solo el archivo
package.json
.
Entonces npm instalará la última versión que satisfaga los rangos semver de todas sus dependencias.
Significa que siempre desea probar su módulo con estas versiones de sus dependencias, y no con la que instaló cuando comenzó a escribir su módulo.
Entonces, en ese caso,
package-lock.json
es claramente inútil.
Más, puede ser molesto.
Estas herramientas administran estos archivos, por lo que, suponiendo que el uso de hilo actualice efectivamente el
package-lock.json
, supongo que la
package-lock.json
ambos archivos funciona bien.
Creo que lo más importante para su usuario es
package-lock.json
(yo, por ejemplo, no uso hilo), por lo que este debe ser comprometido.
Para
yarn.lock
, depende de si trabajas solo o en equipo.
Si solo, supongo que no hay necesidad de cometerlo.
Si (planeas) trabajar en un equipo, entonces probablemente deberías comprometerlo, al menos hasta que el hilo lo
soporte
🙂
Supongo que el equipo de hilo eventualmente dejará de usar
yarn.lock
y usará
package-json.lock
en
package-json.lock
lugar, en este momento será más simple simple
No, el uso simultáneo de ambos archivos de bloqueo ocasionará inconsistencias en su árbol de dependencias, especialmente al colaborar en un equipo. Ignorar una cerradura u otra es una solución simple. Solo asegúrese de que su equipo comprenda y esté de acuerdo con este cambio.