Npm es el gestor de paquetes para la plataforma JavaScript node.js. Coloca los módulos en su sitio (node_modules
) para que el nodo pueda encontrarlos. También gestiona los conflictos de dependencia de forma inteligente.
Npm es configurable para soportar una variedad de casos de uso para publicar, descubrir, instalar y desarrollar programas node. Tiene una lista de poderosos comandos.
Npm 9 fue lanzado el 19 de octubre de 2022. El objetivo de esta versión principal era estandarizar los valores predeterminados apropiados y limpiar las configuraciones heredadas en la medida de lo posible.
Aquí está el comando para instalar npm 9:
% npm install -g npm@9
Después de la instalación, npm está en la versión 9.0.1.
% npm --version
9.0.1
Este es el manual de ayuda:
% npm --help
npm <command>
Usage:
npm install install all the dependencies in your project
npm install <foo> add the <foo> dependency to your project
npm test run this project's tests
npm run <foo> run the script named <foo>
npm <command> -h quick help on <command>
npm -l display usage info for all commands
npm help <term> search for help on <term>
npm help npm more involved overview
All commands:
access, adduser, audit, bugs, cache, ci, completion,
config, dedupe, deprecate, diff, dist-tag, docs, doctor,
edit, exec, explain, explore, find-dupes, fund, get, help,
hook, init, install, install-ci-test, install-test, link,
ll, login, logout, ls, org, outdated, owner, pack, ping,
pkg, prefix, profile, prune, publish, query, rebuild, repo,
restart, root, run-script, search, set, shrinkwrap, star,
stars, start, stop, team, test, token, uninstall, unpublish,
unstar, update, version, view, whoami
Specify configs in the ini-formatted file:
/Users/jenniferfu/.npmrc
or on the command line via: npm <command> --key=value
More configuration info: npm help config
Configuration fields: npm help 7 config
npm@9.0.1 /Users/jenniferfu/.nvm/versions/node/v19.0.0/lib/node_modules/npm
La actualización de npm 9 puede realizarse para cualquier versión de node soportada, ^14.17.0 || ^16.13.0 || >=18.0.0
.
nvm es una forma sencilla de gestionar las versiones de node y npm. Exploramos las características de npm 9 en el entorno de trabajo de node.js 19.
% node --version
v19.0.0
% npm --version
9.0.1
Estas son las nuevas características de npm 9:
- Cambios en la configuración
- Cambios en timing y loglevel
- Cambios en npm login y npm addUser
- Cambios en npm query
- Cambios en npm pack
- Cambios en npm access
- Cambios en npm install
- Eliminación de npm birthday, npm set-script y npm bin
Cambios en la configuración de npm
npm config
gestiona los archivos de configuración de npm. Soporta los siguientes usos:
npm config set <key>=<value> [<key>=<value> ...]
npm config get [<key> [<key> ...]]
npm config delete <key> [<key> ...]
npm config list [--json]
npm config edit
npm config fix
npm config fix
es un nuevo comando que valida la configuración y corrige los problemas.
Aquí está el código fuente:
async fix () {
let problems
try {
this.npm.config.validate()
return // if validate doesn't throw we have nothing to do
} catch (err) {
// coverage skipped because we don't need to test rethrowing errors
// istanbul ignore next
if (err.code !== 'ERR_INVALID_AUTH') {
throw err
}
problems = err.problems
}
if (!this.npm.config.isDefault('location')) {
problems = problems.filter((problem) => {
return problem.where === this.npm.config.get('location')
})
}
this.npm.config.repair(problems)
const locations = []
this.npm.output('The following configuration problems have been repaired:\n')
const summary = problems.map(({ action, from, to, key, where }) => {
// coverage disabled for else branch because it is intentionally omitted
// istanbul ignore else
if (action === 'rename') {
// we keep track of which configs were modified here so we know what to save later
locations.push(where)
return `~ \`${from}\` renamed to \`${to}\` in ${where} config`
} else if (action === 'delete') {
locations.push(where)
return `- \`${key}\` deleted from ${where} config`
}
}).join('\n')
this.npm.output(summary)
return await Promise.all(locations.map((location) => this.npm.config.save(location)))
}
Nos encontramos con un error al utilizar npm 9:
% npm run build
npm ERR! code ERR_INVALID_AUTH
npm ERR! Invalid auth configuration found: `_auth` must be renamed to `//mycompany.jfrog.io/mycompany/api/npm/mycompany-components-registry/:_auth` in project config
npm ERR! Please run `npm config fix` to repair your configuration.`
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/jenniferfu/.npm/_logs/2022-11-03T17_11_47_188Z-debug-0.log
Ejecutando npm config fix
se ha resuelto el problema:
% npm config fix
The following configuration problems have been repaired:
~ `_auth` renamed to `//mycompany.jfrog.io/mycompany/api/npm/mycompany-components-registry/:_auth` in project config
view rawnpm9.config.fix.console hosted with ❤ by GitHub
Para el error de compilación, npm emite algunos errores JSON en stdout
. Anteriormente, npm enviaba todos los errores con formato JSON a stderr
, lo que dificultaba su análisis, ya que el flujo de stderr
suele tener registros ya escritos. npm 9 lo ha mejorado. 🎉
Además, npm config set
ya no acepta opciones de configuración obsoletas o inválidas. npm 9 config ha eliminado node-version
y npm-version
, y ha hecho que install-links
sea por defecto true.
Cambios en la sincronización y el nivel de registro
Todos los comandos de npm pueden tener una opción, --timing
. Cuando el indicador está activado, npm escribe los datos de sincronización en un archivo junto con los datos de registro de depuración. La ubicación del registro se establece mediante la opción logs-dir
y recae en /_logs.
Así es como se ejecuta npm --timing
:
% npm --timing
npm timing npm:load:whichnode Completed in 0ms
npm timing config:load:defaults Completed in 1ms
npm timing config:load:file:/Users/jenniferfu/.nvm/versions/node/v19.0.0/lib/node_modules/npm/npmrc Completed in 1ms
npm timing config:load:builtin Completed in 1ms
npm timing config:load:cli Completed in 2ms
npm timing config:load:env Completed in 0ms
npm timing config:load:project Completed in 0ms
npm timing config:load:file:/Users/jenniferfu/.npmrc Completed in 0ms
npm timing config:load:user Completed in 0ms
npm timing config:load:file:/Users/jenniferfu/.nvm/versions/node/v19.0.0/etc/npmrc Completed in 0ms
npm timing config:load:global Completed in 0ms
npm timing config:load:setEnvs Completed in 1ms
npm timing config:load Completed in 6ms
npm timing npm:load:configload Completed in 6ms
npm timing npm:load:mkdirpcache Completed in 0ms
npm timing npm:load:mkdirplogs Completed in 0ms
npm timing npm:load:setTitle Completed in 16ms
npm timing config:load:flatten Completed in 3ms
npm timing npm:load:display Completed in 5ms
npm timing npm:load:logFile Completed in 4ms
npm timing npm:load:timers Completed in 1ms
npm timing npm:load:configScope Completed in 0ms
npm timing npm:load Completed in 32ms
npm <command>
Usage:
npm install install all the dependencies in your project
npm install <foo> add the <foo> dependency to your project
npm test run this project's tests
npm run <foo> run the script named <foo>
npm <command> -h quick help on <command>
npm -l display usage info for all commands
npm help <term> search for help on <term>
npm help npm more involved overview
All commands:
access, adduser, audit, bugs, cache, ci, completion,
config, dedupe, deprecate, diff, dist-tag, docs, doctor,
edit, exec, explain, explore, find-dupes, fund, get, help,
hook, init, install, install-ci-test, install-test, link,
ll, login, logout, ls, org, outdated, owner, pack, ping,
pkg, prefix, profile, prune, publish, query, rebuild, repo,
restart, root, run-script, search, set, shrinkwrap, star,
stars, start, stop, team, test, token, uninstall, unpublish,
unstar, update, version, view, whoami
Specify configs in the ini-formatted file:
/Users/jenniferfu/.npmrc
or on the command line via: npm <command> --key=value
More configuration info: npm help config
Configuration fields: npm help 7 config
npm@9.0.1 /Users/jenniferfu/.nvm/versions/node/v19.0.0/lib/node_modules/npm
npm timing npm Completed in 37ms
Después de cada ejecución de un comando de temporización, se genera un nuevo archivo de temporización en /_logs/
, como, 2022-11-01T02_31_07_194Z-timing.json
.
El archivo de sincronización se denomina -timing.json
, donde es una marca de tiempo. Este método de nombramiento es similar al de los registros de depuración.
% pwd
/Users/jenniferfu/.npm/_logs
% ls -l
total 104
-rw-r--r-- 1 jenniferfu staff 1633 Oct 30 10:20 2022-10-30T17_20_17_679Z-debug-0.log
-rw-r--r-- 1 jenniferfu staff 1923 Oct 30 18:32 2022-10-31T01_32_04_260Z-debug-0.log
-rw-r--r-- 1 jenniferfu staff 1879 Oct 30 18:32 2022-10-31T01_32_42_633Z-debug-0.log
-rw-r--r-- 1 jenniferfu staff 3894 Oct 30 18:37 2022-10-31T01_37_55_929Z-debug-0.log
-rw-r--r-- 1 jenniferfu staff 2126 Oct 30 18:38 2022-10-31T01_38_07_355Z-debug-0.log
-rw-r--r-- 1 jenniferfu staff 1879 Oct 31 19:31 2022-11-01T02_31_07_194Z-debug-0.log
-rw-r--r-- 1 jenniferfu staff 867 Oct 31 19:31 2022-11-01T02_31_07_194Z-timing.json
Aquí están los datos JSON en 2022-11-01T02_31_07_194Z-timing.json
:
% cat 2022-11-01T02_31_07_194Z-timing.json | npm exec -- json -g
[
{
"metadata": {
"id": "2022-11-01T02_31_07_194Z",
"command": [
"--timing"
],
"logfiles": [
"/Users/jenniferfu/.npm/_logs/2022-11-01T02_31_07_194Z-debug-0.log"
],
"version": "9.0.1"
},
"timers": {
"npm:load:whichnode": 0,
"config:load:defaults": 1,
"config:load:file:/Users/jenniferfu/.nvm/versions/node/v19.0.0/lib/node_modules/npm/npmrc": 1,
"config:load:builtin": 1,
"config:load:cli": 1,
"config:load:env": 1,
"config:load:project": 0,
"config:load:file:/Users/jenniferfu/.npmrc": 0,
"config:load:user": 1,
"config:load:file:/Users/jenniferfu/.nvm/versions/node/v19.0.0/etc/npmrc": 0,
"config:load:global": 0,
"config:load:setEnvs": 1,
"config:load": 7,
"npm:load:configload": 7,
"npm:load:mkdirpcache": 0,
"npm:load:mkdirplogs": 0,
"npm:load:setTitle": 16,
"config:load:flatten": 2,
"npm:load:display": 5,
"npm:load:logFile": 4,
"npm:load:timers": 0,
"npm:load:configScope": 1,
"npm:load": 34,
"npm": 39
},
"unfinishedTimers": {}
}
]
Los datos JSON tienen tres claves de nivel superior, metadatos (línea 4), temporizadores (línea 14) y unfinishedTimers (línea 40).
A partir de npm 9, se ha eliminado timing como valor para --loglevel
. --timing
mostrará la información de temporización independientemente de --loglevel
, excepto cuando sea --silent
.
Aquí está el comando timing con --loglevel
info:
% npm run build --timing --loglevel info
npm info using npm@9.0.1
npm info using node@v19.0.0
npm timing npm:load:whichnode Completed in 0ms
npm timing config:load:defaults Completed in 2ms
npm timing config:load:file:/Users/jenniferfu/.nvm/versions/node/v19.0.0/lib/node_modules/npm/npmrc Completed in 0ms
npm timing config:load:builtin Completed in 0ms
npm timing config:load:cli Completed in 2ms
npm timing config:load:env Completed in 1ms
npm timing config:load:file:/Users/jenniferfu/funStuff/my-app/.npmrc Completed in 0ms
npm timing config:load:project Completed in 3ms
npm timing config:load:file:/Users/jenniferfu/.npmrc Completed in 0ms
npm timing config:load:user Completed in 1ms
npm timing config:load:file:/Users/jenniferfu/.nvm/versions/node/v19.0.0/etc/npmrc Completed in 0ms
npm timing config:load:global Completed in 0ms
npm timing config:load:setEnvs Completed in 1ms
npm timing config:load Completed in 10ms
npm timing npm:load:configload Completed in 10ms
npm timing npm:load:mkdirpcache Completed in 0ms
npm timing npm:load:mkdirplogs Completed in 0ms
npm timing npm:load:setTitle Completed in 16ms
npm timing config:load:flatten Completed in 2ms
npm timing npm:load:display Completed in 5ms
npm timing npm:load:logFile Completed in 7ms
npm timing npm:load:timers Completed in 0ms
npm timing npm:load:configScope Completed in 0ms
npm timing npm:load Completed in 39ms
> my-app@0.1.0 build
> react-scripts build
Creating an optimized production build...
Compiled successfully.
File sizes after gzip:
46.6 kB build/static/js/main.0215976b.js
1.78 kB build/static/js/787.28cb0dcd.chunk.js
541 B build/static/css/main.073c9b0a.css
The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.
The build folder is ready to be deployed.
You may serve it with a static server:
yarn global add serve
serve -s build
Find out more about deployment here:
https://cra.link/deployment
npm timing command:run Completed in 9577ms
npm timing npm Completed in 9637ms
npm info ok
npm info Timing info written to:
npm info /Users/jenniferfu/.npm/_logs/2022-11-05T04_49_06_665Z-timing.json
npm info A complete log of this run can be found in:
npm info /Users/jenniferfu/.npm/_logs/2022-11-05T04_49_06_665Z-debug-0.log
El archivo de sincronización aparece en la línea 59.
El archivo de depuración aparece en la línea 61.
Aquí está el comando de sincronización con --loglevel silent
:
% npm run build --timing --loglevel silent
Creating an optimized production build...
Compiled successfully.
File sizes after gzip:
46.6 kB build/static/js/main.0215976b.js
1.78 kB build/static/js/787.28cb0dcd.chunk.js
541 B build/static/css/main.073c9b0a.css
The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.
The build folder is ready to be deployed.
You may serve it with a static server:
yarn global add serve
serve -s build
Find out more about deployment here:
https://cra.link/deployment
Independientemente de la configuración de --loglevel
, el archivo de tiempo y el archivo de registro se generan en /_logs/
.
Cambios en npm login y npm addUse
Antes de npm 9, había un comando npm addUser
, que tenía dos alias, login y add-user
.
En npm 9, npm login es un comando separado, que verifica un usuario en el registro especificado, y guarda las credenciales en el archivo .npmrc
. Si no se especifica ningún registro, se utilizará el registro por defecto.
Así es como se ejecuta npm login:
% npm login
npm notice Log in on https://registry.npmjs.org/
Login at:
https://www.npmjs.com/login?next=/login/cli/e6283697-ef62-4962-8429-12f18f7eebc8
Press ENTER to open in the browser...
Pulsa ENTER y se abrirá una ventana de acceso en el navegador:
En npm 9, npm addUser
tiene un alias, add-user
. Crea un nuevo usuario en el registro especificado y guarda las credenciales en el archivo .npmrc. Si no se especifica ningún registro, se utilizará el registro por defecto.
Así es como se ejecuta npm addUser
:
% npm addUser
npm notice Log in on https://registry.npmjs.org/
Create your account at:
https://www.npmjs.com/login?next=/login/cli/e8f93881-9877-4558-b575-10b09f1491b1
Press ENTER to open in the browser...
Pulse ENTER y se abrirá una ventana de acceso en el navegador:
Tanto para npm login como para npm addUser
, sólo se admiten dos valores:
auth-type web
: Es el valor por defecto.legacy
: Cuando se utiliza legacy
, el nombre de usuario y la contraseña se leen desde los avisos.
% npm login --auth-type=legacy
npm notice Log in on https://registry.npmjs.org/
Username: testUser
Password:
Estos valores auth-type
han sido eliminados en npm 9: sso
, saml
, oauth
y webauthn
web
ylegacy
sólo prueban sus respectivos métodos, es decir, npm ya no los prueba todos y espera a ver cuál no falla.
Para npm login y npm addUser
, las ventanas de login en el navegador tienen el mismo aspecto. Sin embargo, tienen algunas diferencias dependiendo del auth-type
:
web
: La petición POST a /-/v1/
login contiene un valor { create: true }
en su carga útil para adduser
.legacy
: La petición PUT a /-/user/org.couchdb.user:${username}
contiene un valor de correo electrónico en su carga útil para adduser
.
Cambios en npm query
npm query recupera una lista filtrada de paquetes. Utiliza selectores CSS para realizar el filtrado, aunque no hay selectores de etiquetas, como div
, h1
y a
. El objetivo de la consulta son los objetos de dependencia.
Estos son los selectores soportados:
*
selector universal
#<name>
Selector de dependencia equivalente a [name="..."]
#<name>@<version>
equivalente a [name=<name>]:semver(<version>)
)
,
delimitador de la lista de selectores.
.
selector de tipo de dependencia.
:
Pseudo-selector
Configuramos el Create React App
, que incluye el package.json
% npx create-react-app my-app
% cd my-app
Consultar el paquete react
:
% npm query "#react"
[
{
"name": "react",
"description": "React is a JavaScript library for building user interfaces.",
"keywords": [
"react"
],
"version": "18.2.0",
"homepage": "https://reactjs.org/",
"bugs": "https://github.com/facebook/react/issues",
"license": "MIT",
"files": [
"LICENSE",
"README.md",
"index.js",
"cjs/",
"umd/",
"jsx-runtime.js",
"jsx-dev-runtime.js",
"react.shared-subset.js"
],
"main": "index.js",
"exports": {
".": {
"react-server": "./react.shared-subset.js",
"default": "./index.js"
},
"./package.json": "./package.json",
"./jsx-runtime": "./jsx-runtime.js",
"./jsx-dev-runtime": "./jsx-dev-runtime.js"
},
"repository": {
"type": "git",
"url": "https://github.com/facebook/react.git",
"directory": "packages/react"
},
"engines": {
"node": ">=0.10.0"
},
"dependencies": {
"loose-envify": "^1.1.0"
},
"browserify": {
"transform": [
"loose-envify"
]
},
"_id": "react@18.2.0",
"pkgid": "react@18.2.0",
"location": "node_modules/react",
"path": "/Users/jenniferfu/funStuff/my-app/node_modules/react",
"realpath": "/Users/jenniferfu/funStuff/my-app/node_modules/react",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"from": [
"",
"node_modules/react-dom",
"node_modules/react-scripts",
"node_modules/@testing-library/react"
],
"to": [
"node_modules/loose-envify"
],
"dev": false,
"inBundle": false,
"deduped": false,
"overridden": false,
"queryContext": {}
}
]
El resultado de la consulta muestra los detalles del paquete react. En la línea 68, queryContext
es {}
, una nueva propiedad en npm 9.
La propiedad queryContext
puede incluir versiones, outdated.outOfRange
y outdated.outOfRange
. Veamos tres ejemplos.
Ejemplo 1: La propiedad queryContext`
incluye versiones, un array de todas las versiones disponibles del nodo dado.
:outdated()
es un pseudo-selector para mostrar las dependencias obsoletas. :outdated > #react
muestra los paquetes React desactualizados.
Desde las líneas 69-111 del código de abajo, muestra una larga lista de paquetes React desactualizados.
% npm query ":outdated > #react"
[
{
"name": "react",
"description": "React is a JavaScript library for building user interfaces.",
"keywords": [
"react"
],
"version": "18.2.0",
"homepage": "https://reactjs.org/",
"bugs": "https://github.com/facebook/react/issues",
"license": "MIT",
"files": [
"LICENSE",
"README.md",
"index.js",
"cjs/",
"umd/",
"jsx-runtime.js",
"jsx-dev-runtime.js",
"react.shared-subset.js"
],
"main": "index.js",
"exports": {
".": {
"react-server": "./react.shared-subset.js",
"default": "./index.js"
},
"./package.json": "./package.json",
"./jsx-runtime": "./jsx-runtime.js",
"./jsx-dev-runtime": "./jsx-dev-runtime.js"
},
"repository": {
"type": "git",
"url": "https://github.com/facebook/react.git",
"directory": "packages/react"
},
"engines": {
"node": ">=0.10.0"
},
"dependencies": {
"loose-envify": "^1.1.0"
},
"browserify": {
"transform": [
"loose-envify"
]
},
"_id": "react@18.2.0",
"pkgid": "react@18.2.0",
"location": "node_modules/react",
"path": "/Users/jenniferfu/funStuff/my-app/node_modules/react",
"realpath": "/Users/jenniferfu/funStuff/my-app/node_modules/react",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"from": [
"",
"node_modules/react-dom",
"node_modules/react-scripts",
"node_modules/@testing-library/react"
],
"to": [
"node_modules/loose-envify"
],
"dev": false,
"inBundle": false,
"deduped": false,
"overridden": false,
"queryContext": {
"versions": [
"0.0.0-375616788",
"0.0.0-00d4f95c2",
...
"16.8.0",
"16.8.1",
"16.8.2",
"16.8.3",
"16.8.4",
"16.8.5",
"16.8.6",
"16.9.0-alpha.0",
"16.9.0-rc.0",
"16.9.0",
"16.10.0",
"16.10.1",
"16.10.2",
"16.11.0",
"16.12.0",
"16.13.0",
"16.13.1",
"16.14.0",
"17.0.0-rc.0",
"17.0.0-rc.1",
"17.0.0-rc.2",
"17.0.0-rc.3",
"17.0.0",
"17.0.1",
"17.0.2",
"18.0.0-alpha-00ced1e2b-20211102",
"18.0.0-alpha-01be61c12",
"18.0.0-alpha-02f411578-20211019",
"18.0.0-alpha-031abd24b-20210907",
"18.0.0-alpha-05726d72c-20210927",
"18.0.0-alpha-0883c4cd3-20210929",
"18.0.0-alpha-1314299c7-20210901",
"18.0.0-alpha-13455d26d-20211104",
"18.0.0-alpha-19092ac8c-20210803",
"18.0.0-alpha-1a106bdc2",
"18.0.0-alpha-1a3f1afbd",
...
"18.3.0-next-fecc288b7-20221025"
]
}
}
]
Ejemplo 2: La propiedad queryContext
incluye outdated.inRange
, un array de objetos, cada uno con un from y versions.
from
es la ubicación en disco del nodo que depende del nodo actual, y versions es una matriz de todas las versiones disponibles que satisfacen esa dependencia.
.prod:outdated(in-range)
devuelve las dependencias de producción con una nueva versión que satisface al menos uno de sus bordes en el rango.
Ejecuta la consulta npm ".prod:outdated(in-range)"
, y podemos ver la propiedad outdated en un queryContext
, con un from (línea 4) y versions (líneas 5-9).
"outdated": {
"inRange": [
{
"from": "node_modules/@pmmmwh/react-refresh-webpack-plugin",
"versions": [
"0.12.0",
"0.13.0",
"0.14.0"
]
}
]
}
Ejemplo 3: La propiedad queryContext
incluye outdated.outOfRange
, un array de objetos, cada uno con un from y versions.
from
es la ubicación en disco del nodo que depende del nodo actual y versions es una matriz de todas las versiones disponibles que no satisfacen la dependencia.
.prod:outdated(out-of-range)
devuelve las dependencias de producción que no satisfacen la dependencia.
Ejecuta la consulta npm ".prod:outdated(out-of-range)"
, y podemos ver la propiedad outOfRange
en un queryContext
, con un from (línea 4) y versions (líneas 5-10).
Cambios en npm pack
npm pack crea un tarball de un paquete. Dentro del entorno de trabajo de Create React App
, ejecuta npm pack. Genera el tarball, my-app-0.1.0.tgz
, en el directorio.
% npm pack
npm notice
npm notice 📦 my-app@0.1.0
npm notice === Tarball Contents ===
npm notice 3.4kB README.md
npm notice 809B package.json
npm notice 3.9kB public/favicon.ico
npm notice 1.7kB public/index.html
npm notice 5.3kB public/logo192.png
npm notice 9.7kB public/logo512.png
npm notice 492B public/manifest.json
npm notice 67B public/robots.txt
npm notice 564B src/App.css
npm notice 528B src/App.js
npm notice 246B src/App.test.js
npm notice 366B src/index.css
npm notice 535B src/index.js
npm notice 2.6kB src/logo.svg
npm notice 362B src/reportWebVitals.js
npm notice 241B src/setupTests.js
npm notice === Tarball Details ===
npm notice name: my-app
npm notice version: 0.1.0
npm notice filename: my-app-0.1.0.tgz
npm notice package size: 25.0 kB
npm notice unpacked size: 30.8 kB
npm notice shasum: 56364d3666525f27f5c482160e6194f90c8d9afb
npm notice integrity: sha512-CVPXwX2zoa7+t[...]ea8pw+e6EIWug==
npm notice total files: 16
npm notice
my-app-0.1.0.tgz
% ls -l my-app-0.1.0.tgz
-rw-r--r-- 1 jenniferfu staff 24953 Nov 3 22:29 my-app-0.1.0.tgz
A partir de npm 9, npm pack sigue un estricto orden de operaciones al aplicar las reglas de ignorar. Si una matriz de archivos está presente en el package.json
, las reglas en los archivos .gitignore
y .npmignore
de la raíz serán ignoradas.
Cambios en npm access
npm access establece el nivel de acceso en los paquetes publicados. Este es el uso del comando en npm 8:
npm access public [<package>]
npm access restricted [<package>]
npm access grant <read-only|read-write> <scope:team> [<package>]
npm access revoke <scope:team> [<package>]
npm access 2fa-required [<package>]
npm access 2fa-not-required [<package>]
npm access ls-packages [<user>|<scope>|<scope:team>]
npm access ls-collaborators [<package> [<user>]]
npm access edit [<package>]
Para todos los subcomandos, npm access realizará acciones sobre los paquetes en el directorio de trabajo actual si no se pasa ningún nombre de paquete al subcomando.
public
/ restricted
(obsoleto): Establece que un paquete sea de acceso público o restringido.
grant
/ revoke
(obsoleto): Añade o elimina la capacidad de los usuarios y equipos de tener acceso de sólo lectura o de lectura-escritura a un paquete.
2fa-required
/ 2fa-not-required
Configura si un paquete requiere que cualquier persona que lo publique tenga activada la autenticación de dos factores en su cuenta.
ls-packages
Muestra todos los paquetes a los que puede acceder un usuario o un equipo, junto con el nivel de acceso, excepto los paquetes públicos de sólo lectura. No imprimirá el listado completo del registro.
ls-collaborators
Muestra todos los privilegios de acceso de un paquete. Sólo mostrará los permisos de los paquetes a los que tenga al menos acceso de lectura.
Si se pasa <user>
, la lista se filtra sólo a los equipos a los que pertenece el usuario.
edit
No implementado
Los subcomandos de acceso a npm han sido renombrados. Este es el uso del comando en npm 9:
npm access list packages [<user>|<scope>|<scope:team> [<package>]
npm access list collaborators [<package> [<user>]]
npm access get status [<package>]
npm access set status=public|private [<package>]
npm access set mfa=none|publish|automation [<package>]
npm access grant <read-only|read-write> <scope:team> [<package>]
npm access revoke <scope:team> [<package>]
Aunque npm 9 cambió el nombre de los subcomandos, la funcionalidad sigue siendo la misma.
Cambios en npm install
El comando npm install instala un paquete y cualquier paquete del que dependa. install-strategy
es una nueva bandera que tiene los siguientes tipos
hoisted
: Instala sin duplicar en el nivel superior y duplica según sea necesario dentro de la estructura de directorios. Es el valor por defecto.
npm install —-install-strategy=hoisted is the same as npm install.
nested
: Se instala en el lugar. No hay que levantar nada.
npm install --install-strategy=nested is the same as npm install --legacy-bundling. legacy-bundling has been deprecated in favor of —-install-strategy=nested.
shallow
: Sólo instala las dependencias directas en el nivel superior.
npm install --install-strategy=shallow is the same as npm install --global-style. global-style has been deprecated in favor of --install-strategy=shallow.
Muchos parámetros de configuración tienen algún efecto sobre la instalación, y install-links
es una de las opciones. Cuando se establece en true
, las dependencias del protocolo se empaquetarán e instalarán como dependencias normales en lugar de crear un enlace simbólico. El valor por defecto era false en npm 8 y ha sido cambiado a true en npm 9.
Eliminación de npm birthday, npm set-script y npm bin
npm birthday es un huevo de pascua. Dice cuántos milisegundos faltan para el cumpleaños de npmcli
o imprime un montón de emojis de globos y el hash de la primera confirmación de este repositorio. Fue eliminado y separado en su propio paquete hace algún tiempo.
npm set-script
crea una tarea en la sección de scripts del package.json.
npm bin
imprime la carpeta donde npm instalará los ejecutables.
Estos son comandos válidos en npm 8:
% npm birthday
npm WARN birthday birthday is deprecated and will be removed in a future release
npm ERR! Please try again in 28265164161ms
% npm set-script start "http-server ."
npm WARN set-script set-script is deprecated, use `npm pkg set scripts.scriptname="cmd" instead.
% npm bin
/Users/jenniferfu/node_modules/.bin
Sin embargo, estos comandos se han eliminado en npm 9:
% npm birthday
Unknown command: "birthday"
To see a list of supported npm commands, run:
npm help
% npm set-script start "http-server ."
Unknown command: "set-script"
Did you mean this?
npm run-script # Run arbitrary package scripts
To see a list of supported npm commands, run:
npm help
% npm bin
Unknown command: "bin"
To see a list of supported npm commands, run:
npm help
Conclusión
npm 9 ha sido liberado. Soporta las versiones de node ^14.17.0
|| ^16.13.0
|| >=18.0.0.
npm 9 cambió config
, timing
, loglevel
, login
, addUser
, query
, pack
, access
, e install
. También eliminó npm birthday
, npm set-script
y npm bin
.