我正在使用npm在Ubuntu 14.04服务器上安装一些内部开发的软件包。在安装过程中,会在/ tmp下创建一个文件夹。根据{{3}},成功退出时应删除临时文件夹,但不会发生。我检查了退出代码,它按预期为零,那还有什么可能导致这个?它堵塞了我的构建服务器,目前可用的磁盘空间非常有限 - 我可以通过使用cronjob来清理,或者通过添加更多的磁盘空间来解决这个问题,但我想知道原因!
运行npm v 1.4.28。
更新:只有在使用npm shrinkwrap
命令对您正在安装的软件包进行了收缩包装时才会发生这种情况。在npm v 1.4.28和2.1.10中确认为问题。请参阅docs上的问题。
编辑:我还以详细模式运行安装,以
结束npm verb exit [ 0, true ]
npm info ok
在写入时,输出中有很多关于/ tmp的提及,以及那里的解决方法,但没有明显的尝试来清理它。
答案 0 :(得分:9)
显然这是npm中的一个错误。我提出了一个问题on GitHub。只有在安装收缩包装时才会发生这种情况。
作为同时解决方法,我最后只是通过在/etc/cron.hourly中创建脚本来运行一个删除任何超过10分钟的文件夹的cronjob。
#!/bin/bash
# Removes any folder starting with npm- in the /tmp folder.
sudo find /tmp/ -maxdepth 1 -name 'npm-*' -type d -mmin +10 -exec rm -rf {} +
<强>更新强>
虽然这被证实是一个错误,但听起来不会在npm2中修复,因此您可以选择使用npm3还是解决方法(如上面的脚本)。如果你在Windows上,Github page上有一个Powershell版本的脚本。
答案 1 :(得分:1)
在package.json中添加一个单行到postinstall脚本,该脚本将在每个npm安装结束时运行:
{
"scripts": {
"postinstall": "ppid=$(ps -p ${1:-$$} -o ppid=;); ppid=$(echo ${ppid}|tr -d '[[:space:]]'); if [ -z ${npm_config_tmp} ]; then npm_config_tmp=/tmp; fi; rm -rf \"${npm_config_tmp}\"/npm-${ppid}*"
}
}
如果你不喜欢单行,那么还有一个单独的脚本可用。