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

我正在使用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'd整个主题文件夹及其内容到777,但这并不能解决问题。 我已经在全球安装了这可能是问题,但我不知道如何解决。

编辑

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

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

npm install vinyl-fs --save-dev

修改您的gulp文件以使用VFS:

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

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

我遇到这个错误的原因是因为这些文件是由一个更通用的组和用户拥有的,所以多个团队成员可以一起工作。 Ubuntu显然不允许你修改别人的文件。 我怀疑OP是在类似的情况下(networking服务器可能拥有这些文件)。

如果你不需要这种设置,那么你的另一个select就是把你的用户拥有的文件改成:

sudo chown -R me:me .

将文件权限设置为777不会对您有所帮助,因为除非您拥有该文件,否则无法使用sudo对其进行chmod 。 (因此,它运行时,你跑sudo吞咽。)

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

应该修复它。 或者你想从哪个目录开始。 这是没有危险的,可能是因为你的节点安装。 这是相当普遍的,应该在运行npm@3.XX安装后进行npm@3.XX

gulp 3.x 有一个错误 ,使得它想要chown所有文件,无论它是否已经具有所有必需的权限。 据说这是固定在一口4。

链接的错误包含一个很好的解决方法,如果您知道这些文件具有正确的权限:只需用fs.chmod中的空函数replacefs.chmod gulpfile.js

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