You need to enable JavaScript to run this app. 使用npm-registry-client发布包出现ERR_INVALID_ARG_TYPE错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用npm-registry-client发布包出现ERR_INVALID_ARG_TYPE错误如何解决

错误原因
  • npm-registry-client的fetch方法默认会自动解析响应内容,拉取tarball二进制流时如果没有显式指定响应编码,返回的data会被解析为字符数组,而非要求的二进制Buffer对象。
  • 发布包时底层需要对包内容做哈希校验,调用Hash.update方法时仅支持字符串、Buffer、TypedArray等类型,传入数组会直接抛出类型不匹配错误。
解决方法
  1. 调整fetch方法的请求参数,显式添加encoding: null配置,强制返回原生二进制Buffer:
    拉取tarball时,在原请求参数from.params中新增encoding: null,避免二进制内容被错误解析为数组。
  2. 修正publish方法的回调函数写法,原代码中直接写process(error, data, raw, res) {}会触发未定义错误,替换为合法的回调函数声明。

修改后参考代码:

new Promise((resolve, reject) => {
    // 合并参数,新增encoding: null强制返回Buffer类型
    const fetchOpts = Object.assign({}, from.params, { encoding: null })
    client.fetch(dist.tarball, fetchOpts, function (error, data, raw, res) {
        if (error) {
            return reject(error);
        }
        resolve(data);
    });
})
.then(tarball => {
    return new Promise((resolve, reject) => {
        const publishParams = {
            metadata: newMetadata,
            access: "public",
            body: tarball, // 此时tarball为Buffer类型,符合哈希计算要求
            auth: to.params.auth
        }
        // 修正回调函数写法
        npm.publish(`${to.feedUrl}/${moduleName}`, publishParams, function(error, data, raw, res) {
            if (error) {
                return reject(error)
            }
            resolve(data)
        });
    })
})

内容的提问来源于stack exchange,提问作者char

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:09:01