update start quick how npm package yarnpkg

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:

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 y npm 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.

Yarn

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.