node.js - 如果此任务在此文件更改时启动,如何运行任务(更改文件)并避免循环
问题描述
我有任务:
- 将我的 Sass 代码编译成 css 的“样式”
- .sass 文件更改时将启动“样式”的“watch”
- 启动所有任务的“默认”
一切都很好,直到我想对我的属性进行排序,我找到了可以在 CLI 中工作的 sass-sort 模块。我还下载了 gulp-exec 模块,所以我可以将命令添加sortsass ./src/styles/main.sass
到我的任务中styles
我尝试.pipe(exec('sortsass ./src/styles/main.sass'))
从“样式”中取出,创建新任务,并将其添加到“监视”任务中(因此在文件更改后,任务“样式”和新任务开始),结果相同。还尝试用谷歌搜索其他对 .sass 文件中的属性进行排序的方法(样式 lint 与 scss 配合得很好,但我正在使用 sass),试图找到vscode
可以做到这一点的扩展。
const gulp = require('gulp');
const browserSync = require('browser-sync').create();
const del = require('del');
const imagemin = require('gulp-imagemin')
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const sourcemaps = require('gulp-sourcemaps');
const sass = require('gulp-sass');
const cleanCSS = require('gulp-clean-css');
const autoprefixer = require('gulp-autoprefixer');
const exec = require('gulp-exec');
gulp.task('clean', function() {
return del([
'build/*']);
});
gulp.task('markup', function() {
return gulp.src([
'./src/**/*.html'
], {base: './src/'})
.pipe(gulp.dest('./build/'))
.pipe(browserSync.stream());
});
gulp.task('styles', function() {
return gulp.src([
'./src/**/*.sass'
], {base: './src/'})
.pipe(exec('sortsass ./src/styles/main.sass'))
.pipe(sourcemaps.init())
.pipe(sass())
.pipe(cleanCSS({level: 2}))
.pipe(autoprefixer({Browserslist: ['last 2 versions'], cascade: false}))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./build/'))
.pipe(browserSync.stream())
});
gulp.task('scripts', function() {
return gulp.src([
'./src/js/lib.js',
'./src/js/main.js',
], {base: './src/'})
.pipe(uglify({toplevel: true}))
.pipe(gulp.dest('./build/'))
.pipe(browserSync.stream());
});
gulp.task('concat-scripts', function() {
return gulp.src([
'./build/js/lib.js',
'./build/js/main.js',
])
.pipe(concat('script.js'))
.pipe(gulp.dest('./build/js/'))
.pipe(browserSync.stream());
})
gulp.task('images', function() {
return gulp.src([
'./src/img/**'
], {base: './src/'})
.pipe(imagemin({progressive: true}))
.pipe(gulp.dest('./build/'))
.pipe(browserSync.stream());
});
gulp.task('watch', function() {
browserSync.init({
server: {
baseDir: "./build/"
}
});
gulp.watch('./src/**/*.html', gulp.series('markup'))
gulp.watch('./src/**/*.sass', gulp.series('styles'))
gulp.watch('./src/**/*.js', gulp.series('scripts', 'concat-scripts'))
gulp.watch('./src/**/img/**/*', gulp.series('images'))
});
gulp.task('trash', function() {
return del([
'./build/styles/media.css',
'./build/styles/media.css.map',
'./build/js/lib.js',
'./build/js/main.js',
]);
});
gulp.task('default', gulp.series(gulp.series('clean',
gulp.parallel('markup',
'images',
'styles',
'scripts')),
'concat-scripts',
'trash',
'watch'))
当我开始“默认”任务时:
[19:35:15] Using gulpfile ~\Desktop\projects\new\gulpfile.js
[19:35:15] Starting 'default'...
[19:35:15] Starting 'clean'...
[19:35:15] Finished 'clean' after 34 ms
[19:35:15] Starting 'markup'...
[19:35:15] Starting 'images'...
[19:35:15] Starting 'styles'...
[19:35:15] Starting 'scripts'...
[19:35:15] gulp-imagemin: Minified 0 images
[19:35:15] Finished 'images' after 58 ms
[19:35:15] Finished 'markup' after 61 ms
[19:35:15] Finished 'scripts' after 61 ms
[19:35:15] Finished 'styles' after 239 ms
[19:35:15] Starting 'concat-scripts'...
[19:35:15] Finished 'concat-scripts' after 9.62 ms
[19:35:15] Starting 'trash'...
[19:35:15] Finished 'trash' after 5.4 ms
[19:35:15] Starting 'watch'...
[Browsersync] Access URLs:
------------------------------------
Local: http://localhost:3000
External: http://192.168.0.4:3000
------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
------------------------------------
[Browsersync] Serving files from: ./build/
and when I am changing sass file
[19:36:46] Starting 'styles'...
[Browsersync] 4 files changed (main.css.map, main.css, media.css.map, media.css)
[19:36:47] Finished 'styles' after 264 ms
[19:36:47] Starting 'styles'...
[Browsersync] 4 files changed (main.css.map, main.css, media.css.map, media.css)
[19:36:47] Finished 'styles' after 228 ms
[19:36:47] Starting 'styles'...
[Browsersync] 4 files changed (main.css.map, main.css, media.css.map, media.css)
[19:36:48] Finished 'styles' after 223 ms
[19:36:48] Starting 'styles'...
[Browsersync] 4 files changed (main.css.map, main.css, media.css.map, media.css)
[19:36:48] Finished 'styles' after 207 ms
[19:36:48] Starting 'styles'...
这个循环是无止境的,直到我关闭终端
所以现在真正的问题更多是如何对属性进行排序,然后是如何避免循环。但我会对任何解决方案感到满意(避免循环,或另一种对属性进行排序的方式:vscode 的扩展,gulp 的插件等)
解决方案
CSSComb 帮助了我。在vscode中安装
推荐阅读
- java - 由 org.xmlpull.v1.XmlPullParserException 引起的错误
- python - 绘图无法正确显示
- firebase - 如何以编程方式查询 Firebase 转换数据
- javascript - 基于布尔属性的条件字段验证
- java - DBUnit 参照完整性约束违反一对一关系
- swift - 使用 where 字段与替代方法的 Firebase 查询效率
- node.js - 如何使用队列扩展 websocket 客户端
- python-3.x - Keras 仅对大多数特定预测的准确性
- c - 用 Redis 或 CSV 文件替换 C Oracle 后端
- c# - WPF 从 ViewModel 获取当前 MouseOver TreeViewItem