我正在做一个个人项目。由于我不必担心与他人合作或从开发环境部署到生产环境,所以我只是在为我的应用程序提供服务的服务器上修改文件。
为此,我使用 Panic 的 Transmit (https://panic.com/transmit/),一个 FTP/SFTP 客户端。让我高兴的是,它提供了 FUSE 功能,因此我可以将服务器的文件系统挂载到本地文件系统上。我在文本编辑器中进行更改,这些更改会被保存,并自动上传。
但我的文件还需要 Gulp 处理(http://gulpjs.com/) 在服务器上。这部分也有效。Gulp 监视文件,如果文件发生变化,它会处理它们。
不幸的是,这两件事不能很好地协同工作。当我进行更改时,我最终得到的是一个空文件,而我期望的是新处理的文件。
我的假设是 Transmit 没有自动传输我的文件。而且它似乎没有提供这样做的选项。在 Transmit 有机会上传其内容之前,Gulp 就看到了文件更改,因此我得到的是空文件。
我的问题是,我该怎么做才能解决这个问题?我希望尽可能地接近我当前的工具链,但我也愿意接受全新的方法来实现这一点。
谢谢!
答案1
事实证明文件传输原子性可能这只是问题的一半。也就是说,我在发帖之前做的一件事是确保我的文本编辑器是原子的。事实并非如此,但即使我解决了这个问题,问题仍然存在。
另一半是文件权限。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']);
});