为什么可以';我不能通过child_process.exec调用运行npm安装吗?npm出口243,无输出

为什么可以';我不能通过child_process.exec调用运行npm安装吗?npm出口243,无输出,npm,Npm,我已经确定手动运行npm安装是可行的: #rm-r节点(U模块)/ #npm安装 npm WARN nextjs无存储库字段。 npm WARN nextjs无许可证字段。 npm警告可选跳过可选依赖项:fsevents@2.3.2(节点\单元模块/fsevents): npm WARN notsup跳过可选依赖项:不支持的平台fsevents@2.3.2:通缉{“os”:“darwin”,“arch”:“any”}(当前:{“os”:“linux”,“arch”:“x64”}) 在14.233

我已经确定手动运行
npm安装
是可行的:

#rm-r节点(U模块)/
#npm安装
npm WARN nextjs无存储库字段。
npm WARN nextjs无许可证字段。
npm警告可选跳过可选依赖项:fsevents@2.3.2(节点\单元模块/fsevents):
npm WARN notsup跳过可选依赖项:不支持的平台fsevents@2.3.2:通缉{“os”:“darwin”,“arch”:“any”}(当前:{“os”:“linux”,“arch”:“x64”})
在14.233s中添加了来自259名贡献者的275个包和经审核的276个包
43个方案正在寻求资金
有关详细信息,请运行“npm基金”
发现0个漏洞
#回声$?
0
如您所见,手动执行时退出代码
0
。没有错误

在我的例子中,
package.json
如下所示:

{
“脚本”:{
“开发”:“下一个开发”,
“构建”:“下一个构建”,
“开始”:“下一次开始”
},
“依赖项”:{
“下一步”:“^10.2.0”,
“nprogress”:“^0.2.0”,
“博士后”:“^2.0.0-beta.5”,
“反应”:“^17.0.2”,
“反应dom”:“^17.0.2”
},
“依赖性”:{
“@types/n进度”:“^0.2.0”,
“@types/react”:“^17.0.3”,
“类型脚本”:“^4.2.4”
}
}
但是,这样做并不能像预期的那样起作用:

#rm-r节点(U模块)
#节点my_script.js
err=错误:命令失败:npm安装
在ChildProcess.exithandler(child_process.js:308:12)
在ChildProcess.emit(events.js:315:20)
在maybeClose(内部/子进程js:1048:16)
在Process.ChildProcess.\u handle.onexit(internal/child\u Process.js:288:5){
被杀:错,
代码:243,
信号:空,
cmd:'npm安装'
}
标准输出=
标准偏差=
使用以下脚本,我希望它能够正常工作:-(

const child\u process=require('child\u process'))
child_process.exec('npm install',函数(err、stdout、stderr){
console.log('err=',err)
log('stdout=',stdout)
log('stderr=',stderr)
})
在不同的上下文中,它是完全相同的命令,但产生退出代码
243
,没有输出

但是你猜怎么着!所有模块都安装正确。只有退出代码和缺少输出是不好的

现在,我只想忽略这个特定的退出代码,但我更想了解到底发生了什么

为什么特别没有输出?即使是
child\u process.exec('npm')
本身也不会产生输出。即使是在
bash-c“…>>log2>>log”
中包装,也不会产生对
日志文件的输出。我可以做些什么来解决这个问题


即使使用
spawn
(而不是
exec
)在
npm
不产生输出的情况下也存在同样的问题。
child\u进程.spawn('bash',['-c',“npm>>日志2>>日志”])。on('error',console.log)
对于
npm--help
npm install

,使用snap安装是个坏主意

  • 它有自动更新功能,这不利于生产

  • 由于某些原因,上述问题仅在快照环境中发生

    话虽如此,我还是对在snap环境中解决这个问题的其他解决方案感兴趣,因为snap和我试图运行的自动化可能有合法的用途

  • 在Linux上安装Node.js最新版本的更好方法:

    另外:(备选方案2)


    现在以正常的方式安装Node.js后,
    child\u process.exec('npm',console.log)
    会像您所期望的那样提供输出。

    这是因为我从中安装了
    Node
    吗?我注意到运行
    child\u process.exec('env',console.log)
    与在shell上运行
    env
    相比,我得到了更多的
    SNAP\code>变量。