【问题标题】:How do I publish a private npm package with gitlab ci?如何使用 gitlab ci 发布私有 npm 包?
【发布时间】:2019-02-13 08:23:33
【问题描述】:

我想用 Gitlab CI 发布一个私有 npm 包。

我为我的 npm 用户创建了一个身份验证令牌,并在我的 Gitlab CI 设置中将其设置为变量 NPM_TOKEN

然后,该作业会使用注册表和身份验证令牌创建一个 .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`

是否可以仅使用身份验证令牌进行发布?

【问题讨论】:

标签: npm gitlab gitlab-ci


【解决方案1】:

正如@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 文件中查找其他 URL。还要确保您没有覆盖package.json 文件中的注册表!您可以在该文件中搜索 publishConfig

【讨论】:

    【解决方案2】:

    为了稍微详细说明 @phihag 的回答,正斜杠非常很重要。

    一开始我一直收到 404 not found

    $ 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 未找到,但现在我无法进行身份验证。 几个小时。

    $ 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 在告诉我我要发布到的 URL 方面没有帮助。再次检查文档显示我在“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'
    

    【讨论】:

    • 谢谢,后面的斜线是我遗漏的部分!
    • 任何使用publishConfigpackage.json 中设置registry 值的人的注意事项:尾斜线也是必需的,所以https://gitlab.company.com/api/v4/projects/123/packages/npm 会抛出错误,但https://gitlab.company.com/api/v4/projects/123/packages/npm/ 是有效的。跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 2021-01-29
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多