运行Gulp作为非root用户时出现EPERM错误

时间:2015-03-04 21:30:10

标签: node.js gulp

我正在使用Gulp在一个简单的独立WordPress主题项目上编译一些资产。

当我运行编译一些LESS文件的gulp任务时,我收到以下错误:

stream.js:94
      throw er; // Unhandled stream error in pipe.
            ^
Error: EPERM, chmod '/Users/harryg/Sites/sites/wordpress/wp-content/themes/samarkand-2/assets/css/main.min.css'

当我以sudo运行时,任务执行没有问题。

认为这是权限错误我将整个主题文件夹及其内容chmod到777,但这并没有解决问题。我已经在全球安装了gulp,这可能是问题,但我不确定如何解决。

修改

即使我运行本地gulp,我也会遇到同样的错误。即从我的项目文件夹运行node_modules/.bin/gulp会产生相同的EPERM错误。

3 个答案:

答案 0 :(得分:2)

虽然@cwelske在他的回答中提供了“hacky”解决方法,但他为bug report提供的链接为Gulp 3提供了更好的解决方案:使用vinyl-fs

npm install vinyl-fs --save-dev

修改gulpfile以使用VFS:

添加到您的需求栏:var vfs = require('vinyl-fs');

修改输出管道:.pipe(vfs.dest('./output'));

我遇到此错误的原因是因为文件由更通用的组和用户拥有,因此多个团队成员可以一起处理项目。显然Ubuntu不允许你chmod别人的文件。我怀疑OP处于类似情况(Web服务器可能拥有这些文件)。

如果您不需要这种设置,您的另一个选择是更改您的用户拥有的文件,例如:

sudo chown -R me:me .

将文件权限设置为777对您没有帮助,因为除非您拥有该文件,否则在没有sudo的情况下不能chmod它。 (因此当你作为sudo运行gulp时它会起作用。)

答案 1 :(得分:1)

`sudo chown -R `whoami` sites/wordpress/wp-content/themes/samarkand-2` 

应该修复它。或者您想要从哪个目录开始。这不是危险的,可能因为你的节点安装而来。它非常常见,在使用npm@3.X.X

运行安装后应该一般修复

答案 2 :(得分:1)

gulp 3.x has a bug使得它想要chown所有文件,无论它是否已具有所有必需的权限。据说它已经固定在gulp 4中。

如果您知道文件具有正确的权限,则linked bug包含一个很好的解决方法:只需在fs.chmod中使用空函数替换gulpfile.js

var fs = require('fs');
if (1) fs.chmod = function (a, b, cb) {
    cb(0);
}