我正在使用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错误。
答案 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);
}