gulpで次のようなタスクを自動化したいと考えています。
・ブラウザのリロード
・ES6->ES5
・自動整形
・ベンダープレフィックスの自動化
そこで次のgulpfile.jsを書きました。
packagejson
1{ 2 "name": "gulp-tutorial", 3 "version": "1.0.0", 4 "description": "", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "keywords": [], 10 "author": "", 11 "license": "ISC", 12 "devDependencies": { 13 "@babel/core": "^7.2.2", 14 "@babel/preset-env": "^7.3.0", 15 "browser-sync": "^2.26.3", 16 "gulp": "^4.0.0", 17 "gulp-babel": "^8.0.0-beta.2", 18 "gulp-postcss": "^8.0.0", 19 "gulp-prettier-eslint": "^1.1.0", 20 "gulp-sass": "^4.0.2", 21 "postcss-cssnext": "^3.1.0" 22 } 23} 24
gulpfile
1const gulp = require('gulp') 2const browserSync = require('browser-sync').create(); 3 4gulp.task('sass', () => { 5 const cssnext = require('postcss-cssnext') 6 const postcss = require('gulp-postcss') 7 const sass = require('gulp-sass') 8 const processors = [ 9 cssnext({ browsers: ['last 2 version'] }) 10 ]; 11 12 return gulp.src('./src/**/*.scss') 13 .pipe(sass()) 14 .pipe(postcss(processors)) 15 .pipe(gulp.dest('./dist/css')) 16}) 17 18gulp.task('babel', ()=> { 19 const babel = require('gulp-babel') 20 return gulp.src('./src/**/*.js') 21 .pipe(babel()) 22 .pipe(gulp.dest('./dist/js')) 23}) 24 25gulp.task('serve',(done)=>{ 26 browserSync.init({ 27 server: { 28 baseDir: "./dist", 29 index: "index.html" 30 } 31 }) 32 done() 33}) 34 35gulp.task('prettier', (done)=>{ 36 const prettierEslint = require('gulp-prettier-eslint'); 37 return gulp.src('./src/**/*.js') 38 .pipe(prettierEslint()) 39 .pipe(gulp.dest('./src')); 40}) 41 42gulp.task('watch', ()=>{ 43 const browserReload = (done) => { 44 browserSync.reload() 45 done() 46 } 47 48 gulp.watch('./dist/**/*', browserReload) 49 gulp.watch('./src/scss/*.scss', gulp.series('sass')) 50 gulp.watch('./src/js/*.js', gulp.series('prettier')) 51 gulp.watch('./src/js/*.js', gulp.series('babel')) 52}) 53 54gulp.task('default', gulp.series('serve', 'watch')) 55
src/js配下のファイルをdist/jsにトランスパイルして書き出しています。
問題点
src/js/index.jsをgulp-prettier-eslintで自動整形し、src/js/index.jsに書き出すという風にするのかと思っているのですが、整形後に書き出すとbabelの監視が働いて、次に自動整形が働いて、・・・・という無限ループに陥ります。
質問
・書き出し方法に問題点があるのか
・そもそも考えに誤りがあるのか
当方、趣味でやっているもので、見当違いな質問をしているかも知れませんが、何かアドバイスを頂きたいです。
よろしくお願いします。
[12:15:45] Starting 'browserReload'...
[12:15:45] Finished 'browserReload' after 542 μs
[12:15:45] Starting 'prettier'...
[12:15:45] Starting 'babel'...
[12:15:45] Finished 'prettier' after 30 ms
[12:15:45] Finished 'babel' after 31 ms
[12:15:45] Starting 'browserReload'...
[12:15:45] Starting 'prettier'...
[12:15:45] Starting 'babel'...
[12:15:45] Finished 'browserReload' after 948 μs
[12:15:45] Finished 'prettier' after 24 ms
[12:15:45] Finished 'babel' after 24 ms
[12:15:46] Starting 'browserReload'...
[12:15:46] Starting 'prettier'...
[12:15:46] Starting 'babel'...
[12:15:46] Finished 'browserReload' after 597 μs
[12:15:46] Finished 'babel' after 58 ms
[12:15:46] Finished 'prettier' after 59 ms

回答1件
あなたの回答
tips
プレビュー