Como programador front-end, debe estar familiarizado npm
con yarn
estos dos administradores de paquetes, entonces, ¿ha oído hablar de pnpm? ¿Qué es? ¿Cuál es la diferencia entre npm e hilo y cuál es su función? Este artículo resolverá los siguientes problemas:
pnpm
¿Qué es? cual es el efectopnpm
¿Cuáles son las ventajas y características?pnpm
npm
¿Cuál es la diferencia entre yyarn
?pnpm
Cómo instalar y usar
1.¿Qué es pnpm?
Herramienta de gestión de paquetes rápida y que ahorra espacio en disco
En pnpm
la introducción, podemos ver que en realidad es una herramienta de administración de paquetes y su función es la npm
misma yarn
que . Entonces, dado que la función es la misma, ¿por qué hay otra pnpm
? De la documentación oficial podemos ver que sus ventajas son:
- La instalación del paquete es extremadamente rápida.
- Utilización eficiente del espacio en disco
2. pnpm
¿Cuáles son las ventajas y características?
Mencionamos anteriormente que las ventajas de pnpm son la instalación de paquetes extremadamente rápida y la utilización eficiente del espacio en disco .
La instalación del paquete es extremadamente rápida.
Es dos veces más rápido que la solución tradicional para instalar paquetes. Los siguientes son los puntos de referencia oficiales (comparando npm, pnpm, Yarn Classic y Yarn PnP). En una variedad de situaciones comunes, se compara la velocidad de ejecución de la instalación.
¿Por qué pnpm es más rápido que otros procesadores de paquetes?
Principalmente gracias a su mecanismo de gestión de paquetes, ahorra espacio en disco y mejora la velocidad de instalación (es decir, la segunda ventaja)
Utilización eficiente del espacio en disco
El diseño de pnpm node_modules
utiliza enlaces simbólicos para crear una estructura anidada de dependencias. node_modules
Cada archivo de cada paquete es un vínculo físico desde el almacenamiento direccionable por contenido.
Entonces, ¿por qué se dice que pnpm 基于内容寻址
es más eficiente a la hora de utilizar el espacio en disco?
- El mismo paquete no se instalará repetidamente. Al usarlo
npm/yarn
, si hay 100 dependencias de paquetesexpress
, entonces se puede instalar 100 vecesexpress
y esta parte del código se escribirá en 100 lugares del disco. Peropnpm
esta parte del código solo se escribirá en un lugar y los enlaces físicos se utilizarán directamente para su uso posterior.
- Incluso si hay diferentes versiones de un paquete, pnpm reutilizará en gran medida el código de versiones anteriores. Por ejemplo, al comparar las actualizaciones de las dos versiones de
express4.18.2
y , solo se volvieron a descargar 19 nuevos paquetes actualizados.epxress5.0.0-beta.1
epxress5.0.0-beta.1
3. ¿Cuál es la diferencia entre pnpm
y ?npm
yarn
pnpm
La diferencia con npm
y yarn
se explica principalmente en términos de gestión de dependencia de paquetes.
gestión de dependencias npm2
La gestión de dependencias generada por npm2 es relativamente simple y directa: se completará directamente en la estructura del directorio local de acuerdo con la estructura del árbol de dependencias del paquete de instalación:
La ventaja de este método de npm2 es esa 比较的直观
, pero la desventaja también es obvia.
- Las dependencias jerárquicas son demasiado profundas
- La misma versión del mismo paquete se descargará varias veces, lo que provocará una baja utilización y ocupará mucho espacio en disco.
gestión de dependencia de npm3/hilado
En respuesta a las dos deficiencias de npm2, npm3 ha realizado un cambio. Ya no utiliza una estructura anidada, sino que aplana las dependencias. Esto puede resolver los problemas de dependencias jerárquicas profundas y utilización de paquetes. Entonces las dependencias anteriores La relación se verá así :
Se ve así en el archivo:
Podemos ver que [email protected]
es la misma que la versión [email protected]
referenciada , por lo que se mostrará en mosaico a continuación. Entonces, ¿qué sucede si la versión del paquete referenciada es diferente? Me gusta , espera estos paquetes.accepts
node_modules
debug
http-errors
statuses
[email protected]
Se introducen:[email protected]
,[email protected]
,[email protected]
[email protected]
Se introducen:[email protected]
,[email protected]
,[email protected]
En este punto, node_modules
la estructura queda así:
En cuanto a por qué [email protected]
los paquetes dependientes están en el directorio raíz node_modules
, esta es una de las reglas propias de npm.
npm 3.x
ha adoptado un enfoque plano para la instalación desde el principio node_modules
. Durante la instalación, npm atravesará todo el árbol de dependencias, ya sea una dependencia directa del proyecto o una subdependencia, se instalará primero en el directorio raíz node_modules
. Al encontrar un paquete con el mismo nombre, si se descubre que existe en el directorio raíz node_modules
pero no cumple con los requisitos , el paquete que cumple las condiciones semver-range
se instalará en la subdependencia .node_modules
Este método de ordenamiento en mosaico de npm3 resuelve el problema de las dependencias jerárquicas profundas y la utilización de paquetes, pero también introduce otros problemas:
- Los paquetes que no se introducen manualmente, como
[email protected]
las dependenciascookie
, se introducen manualmente en el proyecto, pero aún se pueden usar. Esto hará que Express cambie su política y deje de usar cookies, y las cookies se usan en nuestro proyecto. Esto hará que Project no se puede iniciar - Aunque npm comparte la misma versión de dependencias, si las versiones son diferentes, npm seguirá descargando completamente dos versiones diferentes, lo que también provocará una redundancia de dependencias.
Para resolver algunos problemas causados por npm3, pnpm adopta otra forma de gestionar las dependencias: el node_modules
diseño de pnpm utiliza enlaces simbólicos para crear tubos estructurales anidados de dependencias.
node_modules
Cada archivo de .pnpm
cada paquete es un vínculo físico desde el almacenamiento direccionable por contenido.
Este es node_modules
el único archivo "real" en formato . Una vez que todos los paquetes están vinculados node_modules
, se crean enlaces simbólicos para construir una estructura de gráfico de dependencia anidada.
Usamos pnpm para instalar [email protected]
y [email protected]
, el directorio generado es el siguiente:
Las dependencias en node_modules
son solo package.json
las dependencias introducidas manualmente en express
y koa
. Si tiene cuidado, encontrará una flecha detrás de estos dos archivos, y esta flecha es el enlace suave utilizado por pnpm para señalar el .pnpm
archivo real del archivo:
Estos archivos se almacenarán de manera uniforme en la memoria. Si hay dependencias en diferentes versiones, pnpm solo descargará los diferentes archivos en diferentes versiones y los agregará a la tienda.
例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。
Todos los archivos se almacenan en algún lugar de su disco duro.
当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间这允许你跨项目地共享同一版本的依赖。
Instalar y usar
instalación npm -g pnpm
Dominio | Significado |
---|---|
pnpm add sax |
Salvar a dependencies |
pnpm add -D sax |
Salvar a devDependencies |
pnpm add -O sax |
Salvar a optionalDependencies |
pnpm add -g sax |
Instalar el paquete globalmente |
pnpm add sax@next |
next Instalar desde etiqueta |
pnpm add [email protected] |
Instalar la versión especificada 3.0.0 |
Descargar dependencias
pnpm install
o pnpm i
删除依赖
pnpm remove
o pnpm rm
o pnpm uninstall
o pnpm un