【发布时间】:2017-05-26 04:07:50
【问题描述】:
tl:dr - 考虑到我的 gulpfile.js 和 CodeIgniter 目录结构,我是否可以使用 gulp.watch 函数来监视目录中的文件更改,然后使用 gulp-sftp 自动上传这些文件而无需相关任务?如果没有,是否有另一种技术可以做到这一点?
问题:
我今天第一次开始使用 Gulp.js,通过关注 tutorial,我已经能够非常轻松地自动执行多项任务,但与我的其他资产文件不同,我似乎找不到在我的应用程序视图文件被更改时查看并自动上传它们的方法。
主要区别在于,我的监视视图目录在发生更改时没有要执行的关联任务。如果我能想出一个有用的任务来执行,那么我的问题就会得到解决,但我宁愿学习一个完全避免这种情况的解决方案——如果它存在的话。
对我来说,这似乎是一个简单解决方案的问题,但我对 Gulp 的功能知之甚少。希望我所描述的有道理。以防万一,我会提供尽可能多的信息。
基本目录结构:
mywebsite.com
|
+-- application
| |
| +-- controllers
| +-- models
| +-- views
|
+-- assets
| |
| +-- css
| +-- images
| +-- js
| +-- src
| |
| +-- images
| +-- js
| +-- scss
|
+-- system
gulpfile.js
// Modules
var gulp = require('gulp'),
newer = require('gulp-newer'),
imagemin = require('gulp-imagemin'),
concat = require('gulp-concat'),
deporder = require('gulp-deporder'),
stripdebug = require('gulp-strip-debug'),
uglify = require('gulp-uglify'),
sass = require('gulp-sass'),
postcss = require('gulp-postcss'),
assets = require('postcss-assets'),
autoprefixer = require('autoprefixer'),
mqpacker = require('css-mqpacker'),
cssnano = require('cssnano'),
sftp = require('gulp-sftp');
// Development Mode?
var devBuild = (process.env.NODE_ENV !== 'production');
// Folder Aliases
var folder = {
src: 'assets/src/',
build: 'assets/',
app: 'application/' // <-------- Separate Folder Alias
};
// SFTP Creds
var host = 'webserver.hostingcompany.com',
user = 'username',
pass = 'password',
remotePath = 'mywebsite.com';
// Optimize Images
gulp.task('images', function() {
var out = folder.build + 'images/';
return gulp.src(folder.src + 'images/**/*')
.pipe(newer(out))
.pipe(imagemin({ optimizationLevel: 5 }))
.pipe(gulp.dest(out));
});
// JavaScript Processing
gulp.task('js', function() {
var jsbuild = gulp.src(folder.src + 'js/**/*')
.pipe(deporder())
.pipe(concat('all.js'));
if (!devBuild) {
jsbuild = jsbuild
.pipe(stripdebug())
.pipe(uglify());
}
return jsbuild.pipe(gulp.dest(folder.build + 'js/'));
});
// CSS Processing
gulp.task('css', ['images'], function() {
var postCssOpts = [
assets({ loadPaths: ['images/'] }),
autoprefixer({ browsers: ['last 2 versions', '> 2%'] }),
mqpacker
];
if (!devBuild) {
postCssOpts.push(cssnano);
}
return gulp.src(folder.src + 'scss/screen.scss')
.pipe(sass({
outputStyle: 'nested',
imagePath: 'images/',
precision: 3,
errLogToConsole: true
}))
.pipe(postcss(postCssOpts))
.pipe(gulp.dest(folder.build + 'css/'));
});
// SFTP Tasks
gulp.task('sftp', function () {
return gulp.src(folder.src + '*')
.pipe(sftp({
host: host,
user: user,
pass: pass,
remotePath: remotePath
}));
});
// Run Tasks
gulp.task('run', ['images', 'js', 'css', 'sftp']);
// Watch for Changes
gulp.task('watch', function() {
gulp.watch(folder.src + 'images/**/*', ['images']);
gulp.watch(folder.src + 'js/**/*', ['js']);
gulp.watch(folder.src + 'scss/**/*', ['css']);
gulp.watch(folder.app + 'views/**/*.php', ['']); // <-------- The Prospective Watch Function
});
// Default Task
gulp.task('default', ['run', 'watch']);
;
【问题讨论】:
-
您需要
gulp-watch模块才能使用手表。 -
@aslantorret 这不可能是真的,因为所有其他任务都正常运行。 Gulp.watch 是一个内置函数。
标签: javascript php codeigniter gulp gulp-watch