Работаю над личным проектом. Поскольку мне не нужно беспокоиться о работе с другими или развертывании из среды разработки в производственную среду, я просто изменяю файлы на сервере, на котором я обслуживаю свое приложение.
Для этого я использую Panic's Transmit (https://panic.com/transmit/), клиент FTP / SFTP. К счастью для меня, он предлагает возможности FUSE, поэтому я могу смонтировать файловую систему моего сервера в мою локальную файловую систему. Я вношу изменения в текстовом редакторе, они сохраняются и загружаются автоматически.
Но мои файлы также должны обрабатываться Gulp (http://gulpjs.com/) на сервере. Эта часть тоже работает. Gulp наблюдает за файлами и, если они изменяются, обрабатывает их.
К сожалению, эти две вещи не работают вместе. Когда я вношу изменения, я получаю пустой файл, где, как я ожидаю, должен быть только что обработанный файл.
Моя гипотеза заключается в том, что Transmit не передает мои файлы атомарно. И похоже, что он не предлагает такой возможности. Gulp замечает изменения файлов до того, как Transmit сможет загрузить их содержимое, поэтому я получаю пустые файлы.
У меня вопрос, что я могу сделать, чтобы с этим справиться? Я бы предпочел оставаться как можно ближе к моей текущей цепочке инструментов, но я также открыт для совершенно новых способов достижения этой цели.
Спасибо!
Оказывается, атомарность передачи файлов может были только половиной проблемы. То есть, перед тем, как разместить здесь пост, я убедился, что мой текстовый редактор был атомарным. Это не так, но проблема сохранялась даже после того, как я это исправил.
Другая половина - это права доступа к файлам. Gulp создавал файл с слишком ограниченными разрешениями. Это было исправлено моим gulp-chmod (https://www.npmjs.com/package/gulp-chmod). Вот что у меня работает gulpfile.js
выглядит как:
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var sassPaths = [
'bower_components/normalize.scss/sass',
'bower_components/foundation-sites/scss',
'bower_components/motion-ui/src'
];
gulp.task('sass', function() {
return gulp.src('scss/styles.scss')
.pipe($.sass({
includePaths: sassPaths,
outputStyle: 'nested'
})
.on('error', $.sass.logError))
.pipe($.autoprefixer({
browsers: ['last 2 versions', 'ie >= 9']
}))
.pipe($.chmod(0o644))
.pipe(gulp.dest('static/css'));
});
gulp.task('default', ['sass'], function() {
gulp.watch(['scss/**/*.scss'], ['sass']);
});