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

我正在使用npm在Ubuntu 14.04服务器上安装一些内部开发的软件包。 安装期间,在/ tmp下创build一个文件夹。 根据文档 ,临时文件夹应该在成功退出时被删除,但不会发生。 我已经检查了退出代码,并且如预期那样为零,那么还有什么可能导致这种情况呢? 它阻塞了我的构build服务器,目前有相当有限的磁盘空间可用 – 我可以通过使用cronjob清理,或通过增加更多的磁盘空间,但我想知道原因!

运行npm v 1.4.28。

更新 :只有当您正在安装的软件包使用npm shrinkwrap命令进行了npm shrinkwrap打包时,才会发生这种情况。 在npm v 1.4.28和2.1.10中被证实是一个问题。 在GitHub上看到这个问题。

编辑:我也运行安装在详细模式下,它结束

 npm verb exit [ 0, true ] npm info ok 

输出中有很多关于/ tmp的内容,并且没有涉及这些内容,但是没有明显的尝试去清除它。

显然这是npm中的一个错误。 我在GitHub上提出了一个问题。 它只发生在你安装一个shrinkwrapped软件包。

作为一个解决方法,同时,我结束了只是运行一个cronjob删除任何这些超过10分钟的文件夹,通过/etc/cron.hourly创build一个脚本。

 #!/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 {} + 

更新

虽然这被证实是一个bug,但它听起来并不像在npm2中会被修复,所以你可以select使用npm3还是使用上述脚本之类的解决方法。 如果你在Windows上, Github页面上有一个Powershell版本的脚本。

在package.json中添加一行代码,以便在每个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