2015-03-04 2 views
6

Я использую Gulp для компиляции некоторых активов в простой автономный проект темы WordPress.Ошибка EPERM при запуске Gulp as non-root

Когда я запускаю мой Глоток задачу, которая компилирует некоторые МЕНЬШЕ файлы, которые я получаю следующее сообщение об ошибке:

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, но это не решает проблему. У меня есть глоток, установленный глобально, что может быть проблемой, но я не уверен, как решить.

EDIT

Даже если я бегу местный глотка я получаю ту же ошибку. То есть запуск node_modules/.bin/gulp из моей папки проекта вызывает такую ​​же ошибку EPERM.

+0

У меня нет ответа, но вы должны избегать запуска глотки как пользователя root.Это опасно. Вместо этого chmod в каталоге проекта на 777 (т. Е. ''/ Users/harryg/Sites/sites/wordpress/wp-content/themes/samarkand-2'') – Tom

+0

@Tom chmod to 777 также опасен – GusDeCooL

ответ

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

следует исправить. Или любой другой каталог, из которого вы хотите начать. Это не опасно и может произойти из-за установки узла. Это довольно часто и должно быть зафиксировано в общем после запуска устанавливается с [email protected]

1

глотком 3.x has a bug, что делает его хочет chown все файлы, независимо, если у него уже есть все необходимые разрешения или нет. Он якобы зафиксирован в глотке 4.

linked bug содержит хороший обходной путь, если вы знаете, что файлы имеют правильные разрешения: Просто замените fs.chmod с пустой функцией в вашем gulpfile.js:

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

Хотя @cwelske дает «хакерское» обходное решение в его ответе, ссылка, которую он предоставляет на 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 находится в аналогичной ситуации (веб-сервер может владеть файлами).

Если вам не требуется такого рода установки, ваш другой вариант, чтобы изменить файлы, которые будут принадлежать вашему пользователю, что-то вроде:

sudo chown -R me:me .

разрешений Установка файлов в 777 не собираются помогите вам, потому что, если вы не являетесь владельцем файла, вы не можете его использовать без sudo chmod. (Следовательно, он работает, когда вы запускаете gulp as sudo.)

Смежные вопросы