安装具有shrinkwrap的软件包时,NPM安装不会在成功退出时删除/ tmp

时间:2014-12-01 10:40:00

标签: node.js npm tmp

我正在使用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的提及,以及那里的解决方法,但没有明显的尝试来清理它。

2 个答案:

答案 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}*" } }

如果你不喜欢单行,那么还有一个单独的脚本可用。

https://gist.github.com/nemisj/11f6d01ef9638af283d3