我有一个Node.js项目,我想使用我的发布脚本发布到我的私有托管范围注册表中(即不在registry.npmjs.org
上)。
发布脚本在docker容器中运行。该脚本从docker容器内部的ENV变量中获取用户名/密码,并使用用户名和密码在本地生成.npmrc
文件。
publish.sh :
#!/usr/bin/env node
const exec = require('child_process').exec;
const fs = require('fs');
// other stuff..
const my_registry = //url for my registry
const username = //read username from args
const password = //read password from args
fs.writeFileSync('.npmrc', `registry=${my_registry}\nunsafe_perm=true\nalways_auth=true\n_auth=${Buffer.from(`${username}:${password}`).toString('base64')}`);
fs.chmodSync('.npmrc', '0755');
exec(`npm publish --registry ${my_registry}`, error => {
if(error) {console.log(error); process.exit(1);}
});
Dockerfile :
FROM node:latest
USER root
ARG USER
ARG PWD
WORKDIR /app/
COPY package.json /app/
RUN npm set unsafe_perm true && npm i
COPY . /app/
RUN node publish.sh -u USER -p PWD
到达脚本的npm publish
部分时,会出现以下错误:
npm错误!代码ENEEDAUTH npm ERR!需要身份验证 发布npm ERR!需要身份验证您需要使用以下方式授权此计算机
npm adduser
但是,当我登录到docker容器并检查文件夹时,我可以看到.npmrc
文件已经存在,并在其中写入了正确的身份验证。
我什至在npm whoami
码头集装箱内做了一个游戏,它用我的用户名玩我,这意味着我已经登录了。
那我为什么会收到ENEEDAUTH
错误?我该如何解决?