He intentado hacer uso del nuevo registro NPM que ahora forma parte de la edición gratuita de GitLab. Estoy intentando crear un paquete NPM y publicarlo en la instancia de GitLab de nuestra empresa. Al intentar ejecutar npm publish , el proceso finaliza con el error:
npm ERR! code E404 npm ERR! 404 Not Found - PUT https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/@sqt-klu%2fodysseus-nn-core npm ERR! 404 npm ERR! 404 '@sqt-klu/odysseus-nn-core@0.0.1' is not in the npm registry. npm ERR! 404 You should bug the author to publish it (or use the name yourself!) npm ERR! 404 npm ERR! 404 Note that you can also install from a npm ERR! 404 tarball, folder, http url, or git url.Este problema aparece cuando se ejecuta a través de GitLab CI/CD, así como a través de la línea de comando local.
Como referencia, la URL de nuestro GitLab interno es gitlab.myemployer.com/sqt-klu/odysseus/nn-core. Como tal, supongo que @sqt-klu es el alcance que quiere GitLab.
El archivo CI/CD (y lo que he estado tratando de replicar localmente) hace esto antes npm publish durante la fase before_script :
- npm config set @sqt-klu:registry https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/ - npm config set https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken ${CI_JOB_TOKEN}Localmente, mi npmrc a nivel de usuario es el siguiente (el token real se elimina, pero es un token de acceso personal al que se le han asignado todos los ámbitos posibles):
audit-level=high python=c:\Python27\python.exe https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/:_authToken=redacted @sqt-klu:registry=https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/ Y si es relevante, aquí están los contenidos cruciales de package.json (he omitido contributors , dependencies , devDependencies , engine y author en este extracto):
{ "name": "@sqt-klu/odysseus-nn-core", "version": "0.0.1", "license": "UNLICENSED", "publishConfig": { "@sqt-klu:registry":"https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/" } }También probé algunos nombres de paquetes diferentes según esta guía oficial , sin éxito.
Siento que me estoy perdiendo algo muy trivial, pero estoy atascado en esto. Cualquier sugerencia o idea útil es apreciada.
Nota: He reemplazado el FQDN del punto final en todas las menciones en caso de que mi empleador se ponga de mal humor por esto.
Los errores 404 pueden, quizás de manera confusa, referirse a problemas con las credenciales en esta situación.
deberías reemplazar
https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authTokencon:
//gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authTokenTodas las demás configuraciones se ven bien* y deberían funcionar. De forma predeterminada, un proyecto de Gitlab debe tener habilitada la función de repositorio de paquetes. Puede activarlo/desactivarlo en la configuración del proyecto.
* podría reducir el alcance de su token de acceso personal a solo api .
Cuando/si usa tokens de implementación a nivel de proyecto o de organización/grupo, solo necesitan read_package_registry y/o write_package_registry .
En mi caso, tuve un problema similar y esta pregunta me ayudó a entender el problema.
package.json y la configuración de publishConfig . Como se muestra en la pregunta, el formato es @company:registy . Al principio no entendí bien y pensé que "registro" significaba su nombre. Pero es literalmente 'registro'.¡Espero que sea útil para alguien!