我想用Gitlab CI发布一个私有的npm软件包。
我已经为我的npm用户创建了一个身份验证令牌,并将其设置为我的Gitlab CI设置中的变量NPM_TOKEN
。
然后,作业使用注册表和auth令牌创建一个.npmrc
文件。
- npm run build && npm run build:es6
- echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}'>.npmrc
- npm publish
作业失败,并显示以下消息:
npm ERR! code ENEEDAUTH
npm ERR! need auth auth required for publishing
npm ERR! need auth You need to authorize this machine using `npm adduser`
是否可以仅使用身份验证令牌进行发布?
答案 0 :(得分:2)
就像@Amityo所说的,而不是手动编辑npmrc文件,
npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}
是解决之道,因为否则您可能会编辑错误的npmrc文件。
如果仍然出现身份验证错误,并且确定令牌正确,请检查注册表URL。您可以运行
npm publish --verbose
其输出将包含类似
的行npm verb getPublishConfig { registry: 'https://.......' }
npm verb mapToRegistry no registry URL found in name for scope @boxine
npm verb publish registryBase https://.......
如果要发布到npmjs.org,则URL(上面的.......
)应该为https://registry.npmjs.org/。
如果此注册表URL不适合,请在npmrc文件中查找其他文件。另外,请确保您没有覆盖package.json
文件中的注册表!您可以在该文件中搜索 publishConfig
。
答案 1 :(得分:1)
为了稍微详细说明 @phihag 的回答,正斜杠 非常 很重要。
一开始我一直找不到 404
$ npm publish
...
...
npm ERR! code E404
npm ERR! 404 Not Found - PUT https://gitlab.company.com/api/v4/packages/npm/%2fmypackage - 404 Not Found
npm ERR! 404
npm ERR! 404 '@scope/mypackage@0.1.0' 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.
我使用的是 2FA,因此作为 gitlab docs state,我需要使用设置为 api
的个人访问令牌进行身份验证。在 the gitlab docs 的另一部分,它声明
某些功能(例如发布包)仅在项目级端点上可用。
所以在控制台中,我尝试发布到项目级别并进行身份验证
$ npm config set @scope:registry https://gitlab.company.com/api/v4/projects/123/packages/npm
$ npm config set //gitlab.company.com/api/v4/projects/123/packages/npm:_authToken 'MyGeneratedAccessToken'
这消除了我的第一个问题 404 not found,但现在我无法进行身份验证。 几个小时。
$ npm publish --verbose
npm verb cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'publish', '--verbose' ]
npm info using npm@7.11.2
npm info using node@v15.11.0
...
...
npm verb publish [ '.' ]
npm notice
npm notice ? @scope/mypackage@0.1.0
npm notice === Tarball Contents ===
npm notice 214B README.md
npm notice 1.1kB package.json
npm notice === Tarball Details ===
npm notice name: @scope/mypackage
npm notice version: 0.1.0
npm notice filename: @scope/mypackage-0.1.0.tgz
npm notice package size: 764 B
npm notice unpacked size: 1.3 kB
npm notice shasum: c22a42756de43e282da01f33c7d5da4940c7d1d7
npm notice integrity: sha512-l/P2cr52Lle7h[...]isu3rDME3lYuQ==
npm notice total files: 2
npm notice
npm verb stack Error: This command requires you to be logged in.
npm verb stack at Publish.publish (/usr/local/lib/node_modules/npm/lib/publish.js:104:29)
npm verb cwd /home/user/Workspace/mypackage
npm verb Linux 5.8.0-43-generic
npm verb argv "/usr/local/bin/node" "/usr/local/bin/npm" "publish" "--verbose"
npm verb node v15.11.0
npm verb npm v7.11.2
npm ERR! code ENEEDAUTH
npm ERR! need auth This command requires you to be logged in.
npm ERR! need auth You need to authorize this machine using `npm adduser`
npm verb exit 1
npm timing npm Completed in 352ms
npm verb code 1
npm ERR! A complete log of this run can be found in:
npm ERR! /home/user/.npm/_logs/2021-05-12T11_23_19_273Z-debug.log
如您所见,npm publish --verbose
无法告诉我我要发布到的网址。再次检查文档表明我在“packages/npm”之后遗漏了尾部斜杠。
使用尾部斜杠,我能够发布到该项目的 gitlab npm 包存储库
$ npm config set @scope:registry https://gitlab.company.com/api/v4/projects/123/packages/npm/
$ npm config set //gitlab.company.com/api/v4/projects/123/packages/npm/:_authToken 'MyGeneratedAccessToken'
对于我使用的所有包
$ npm config set @scope:registry https://gitlab.company.com/api/v4/packages/npm/
$ npm config set //gitlab.company.com/api/v4/packages/npm/:_authToken 'MyGeneratedAccessToken'