【今更】pugとstylusとbabelをgulp
鈴木です。父親の手伝いでとある団体のLPを作ることになったのですが、HTMLとCSSとJSを素で書くなんて絶対したくないので、しない方法です。
インストール
npmよりyarnの方が好きなので、yarnを使います。
yarn init
yarn add --dev gulp gulp-pug gulp-stylus gulp-babel babel-preset-env browser-sync gulp-notify gulp-plumber nib
関連パッケージをインストールします。
パッケージ | 役割 |
---|---|
gulp | タスクランナー |
gulp-pug | gulpでpugをhtmlにする |
gulp-stylus | gulpでstylusをcssにする |
gulp-babel | gulpでbabelを使う |
babel-preset-env | babelのトランスパイルする環境を設定する |
browser-sync | 変更を検知した時にブラウザーに自動で反映させる |
gulp-notify | エラーが起こった時にデスクトップ通知を行う |
gulp-plumber | エラーをハンドリングする時に使う |
nib | stylusでmixinとかの便利機能を使えるようにする |
設定を書く
とりあえず.babelrc
{
"presets": [
["env", {
"targets": {
"browsers": ["last 2 versions", "safari >= 7"]
}
}]
]
}
babel-preset-envを使います。babel-preset-envについてはドキュメントを読んでください。
次にgulpfile.js
。
const gulp = require('gulp')
const stylus = require('gulp-stylus')
const babel = require('gulp-babel')
const pug = require('gulp-pug')
const nib = require('nib')
const plumber = require('gulp-plumber')
const browserSync = require('browser-sync')
const notify = require('gulp-notify')
gulp.task('default', ['stylus', 'browser-sync', 'pug', 'watch', 'babel', 'img'])
gulp.task('watch', () => {
gulp.watch(['./stylus/**'], () => {
gulp.start(['stylus'])
})
gulp.watch(['./pug/**'], () => {
gulp.start(['pug'])
})
})
gulp.task('browser-sync', () => {
browserSync({
server: {
baseDir: './dist/'
}
})
gulp.watch('./dist/js/*.js', ['reload'])
gulp.watch('./dist/*.html', ['reload'])
gulp.watch('./dist/css/*.css', ['reload'])
gulp.watch('./dist/img/*.*', ['reload'])
})
gulp.task('stylus', () => {
gulp.src('./stylus/*.styl')
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
.pipe(stylus({
import: ['nib'],
use: [nib()]
}))
.pipe(gulp.dest('./dist/css'))
})
gulp.task('pug', () => {
const option = {
pretty: true
}
gulp.src('./pug/*.pug')
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
.pipe(pug(option))
.pipe(gulp.dest('./dist'))
})
gulp.task('babel', () => {
gulp.src('./js/**/*.js')
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
.pipe(babel())
.pipe(gulp.dest('./dist/js'))
})
gulp.task('reload', () => {
browserSync.reload()
})
次にpackage.json
の`scripts'。
"scripts": {
"gulp": "node_modules/.bin/gulp pug && node_modules/.bin/gulp stylus && node_modules/.bin/gulp babel && node_modules/.bin/gulp",
"test-deploy": "node_modules/.bin/gulp pug && node_modules/.bin/gulp stylus && node_modules/.bin/gulp babel && node_modules/.bin/gh-pages -d dist -b master"
}
pug/stylus/babel全部実行した後に、監視するためにgulpを実行する。
test-deploy
の方はgh-pages
でgtihubpagesにデプロイ。絶対もっと効率の良い方法がありそうですね。
Author And Source
この問題について(【今更】pugとstylusとbabelをgulp), 我々は、より多くの情報をここで見つけました https://qiita.com/sosukesuzuki/items/f1505e034a4e2c755721著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .