1 2
| + node version 7.5.0 + npm version 4.1.2
|
Gulp setting
1. gulp-sass-lint
gulp + gulp-sass-lint
- ‘gulp-sass-lint’를 사용해 sass파일의 실수를 찾아주는 코드 검사기
npm install
1
| npm install gulp-sass-lint --save-dev
|
gulpfile.js
플러그인 호출, 경로 저장
1 2
| var gulp = require('gulp'), sassLint = require('gulp-sass-lint');
|
task 작성
1 2 3 4 5 6
| gulp.task('default', function () { return gulp.src('sass/**/*.s+(a|c)ss') .pipe(sassLint()) .pipe(sassLint.format()) .pipe(sassLint.failOnError()) });
|

결론은 gulp-sass-lint 플러그인을 따로 쓰는것보다 gulp-sass의 error message가 훨씬 좋음
2. gulp clean-css clean-js
gulp-clean
gulp-clean: 기존 dist 파일 삭제
gulp-clean
npm install & use
1 2 3 4
| npm install --save-dev gulp-clean gulp clean-css gulp clean-js
|
gulpfile.js
플러그인 호출, 경로 저장
1
| var clean = require('gulp-clean');
|
task 작성
1 2 3 4 5 6 7 8 9
| gulp.task('clean-css', function() { return gulp.src(dist + '/*.css', {read: false}) .pipe(clean()); }); gulp.task('clean-js', function() { return gulp.src(dist + '/*.js', {read: false}) .pipe(clean()); });
|
3. gulp building
browserify + vinyl-source-stream + vinyl-buffer + gulp-uglify + gulp-jshint
gulp-sass: sass 파일병합, 빌드 gulp-sass
browserify + vinyl-source-stream + vinyl-buffer: js 파일 병합, 빌드를 위한 플러그인 gulp와 vinyl
gulp-uglify: js 파일 압축을 위한 플러그인
gulp-jshint: js 코드 검사를 위한 플러그인 JSHint 옵션
jshint-stylish: JSHint 에러 메세지의 가독성을 높여주는 플러그인
npm install
1
| npm install browserify vinyl-buffer vinyl-source-stream gulp-uglify gulp-jshint jshint-stylish --save-dev
|
gulpfile.js
플러그인 호출, 경로 저장
1 2 3 4 5 6 7 8
| var gulp = require('gulp'), sourcemaps = require('gulp-sourcemaps'), jshint = require('gulp-jshint'), stylish = require('jshint-stylish'), browserify = require('browserify'), source = require('vinyl-source-stream'), buffer = require('vinyl-buffer'), uglify = require('gulp-uglify');
|
task 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| gulp.task('lint-js', function() { gulp.src(SRC.JS) .pipe(jshint()) .pipe(jshint.reporter('jshint-stylish')) .pipe(jshint.reporter('fail')); }); gulp.task('sass', function() { gulp.src(SRC.SCSS) .pipe(sourcemaps.init({loadMaps: true})) .pipe(sass({outputStyle: 'compact'}).on('error', sass.logError)) .pipe(sourcemaps.write(DIR.MAP)) .pipe(gulp.dest(dist)); }); gulp.task('js', ['lint-js'], function() { return browserify(DIR.SRC + '/js/entry.js') .bundle() .pipe(source('bundle.js')) .pipe(buffer()) .pipe(sourcemaps.init({loadMaps: true})) .pipe(sourcemaps.write(DIR.MAP)) .pipe(gulp.dest(dist)); });
|
4. gulp watch
watch
scss와 js파일이 변경되면 sass,js task(build)를 재실행
npm install
gulp 내장 플러그인
gulpfile.js
task 작성
- sass와 함께 빌드
1 2 3 4 5
| gulp.task('watch', function() { gulp.watch(SRC.SCSS, ['sass']); gulp.watch(SRC.JS, ['js']); });
|
5. gulp minify
Minify css, js
npm install & use
1
| npm install --save-dev gulp-rename gulp-uglify gulp-uglifycss
|
gulpfile.js
플러그인 호출, 경로 저장
1 2 3
| var uglify = require('gulp-uglify'), uglifycss = require('gulp-uglifycss'), rename = require('gulp-rename');
|
task 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| gulp.task('min-js', function(){ gulp.src(dist +'/*.js') .pipe(uglify()) .pipe(rename({ suffix: '.min' })) .pipe(gulp.dest(dist)); }); gulp.task('min-css', function() { gulp.src(dist +'/*.css') .pipe(uglifycss({ "maxLineLen": 80, "uglyComments": true })) .pipe(rename({ suffix: '.min' })) .pipe(gulp.dest(dist)); });
|
6. gulp imagemin
Minify PNG, JPEG, GIF and SVG images with imagemin
npm install & use
1
| npm install --save-dev gulp-rename gulp-uglify gulp-uglifycss
|
gulpfile.js
플러그인 호출, 경로 저장
1
| var imagemin = require('gulp-imagemin');
|
task 작성
1 2 3 4 5
| gulp.task('imagemin', function() { gulp.src(SRC.IMG) .pipe(imagemin()) .pipe(gulp.dest(dist)) });
|
npm scripts
개발작업에서 사용되는 build와 배포에 사용되는 build를 구분한다.
1.devbuild(개발용) :
npm start
npm run devbuild
npm script
1
| "devbuild": "npm run lint:sass && npm run lint:js && npm run watch:file"
|
sass-lint
- sass파일의 실수를 찾아주는 코드 검사기: node-sass의 기본 lint를 사용해도 무방함
npm script
1
| "lint:sass": "sass-lint -c .sass-lint.yml 'src/sass/utils/, src/sass/gtris.scss' -v -q"
|
sass-lint
jshint
npm script
1
| "lint:js": "jshint --verbose src/js/util/ src/js/components"
|
nodemon
npm script
1
| "watch:file": "nodemon -e scss,js --watch src -x \"npm run build:css && npm run build:js\""
|
node-sass
node-sass
npm script
1
| "build:css": "node-sass --output-style compact --indent-type tab --indent-width 1 --source-map dist/map/ -o src/sass/utils/ src/sass/gtris.scss dist/gtris.css"
|
browserify
npm script
1
| "build:js": "browserify src/js/entry.js > dist/bundle.js"
|
2.build(배포용)
npm start
npm run build
npm script
1
| "build": "npm run build:css && uglifyjs src/js/util/*.js src/js/components/*.js -o dist/bundle.min.js --source-map dist/map/bundle.min.js.map -p 5 -c -m"
|
uglifyjs
npm script
1
| uglifyjs src/js/util/*.js src/js/components/*.js -o dist/bundle.min.js --source-map dist/map/bundle.min.js.map -p 5 -c -m
|