Skip to content

Instantly share code, notes, and snippets.

@yomotsu
Last active October 18, 2018 14:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save yomotsu/6e1d6345671e2bea563050a5fb777e5f to your computer and use it in GitHub Desktop.
Save yomotsu/6e1d6345671e2bea563050a5fb777e5f to your computer and use it in GitHub Desktop.
rollup /w gulp
'use strict';
const browserSync = require( 'browser-sync' ).create();
const gulp = require( 'gulp' );
const gulpif = require( 'gulp-if' );
const rename = require( 'gulp-rename' );
const uglify = require( 'gulp-uglify' );
const rollup = require( 'rollup' );
const rollupStream = require( 'rollup-stream' );
const commonjs = require( 'rollup-plugin-commonjs' );
const nodeResolve = require( 'rollup-plugin-node-resolve' );
const babel = require( 'rollup-plugin-babel' );
const source = require( 'vinyl-source-stream' );
const buffer = require( 'vinyl-buffer' );
const sass = require( 'gulp-sass' );
const postcss = require( 'gulp-postcss' );
const autoprefixer = require( 'autoprefixer' );
const csswring = require( 'csswring' );
const plumber = require( 'gulp-plumber' );
const runSequence = require( 'run-sequence' ).use( gulp );
let production = false;
let cache;
const AUTOPREFIXER_BROWSERS = {
browsers: [
'ie >= 11',
'safari >= 8',
'ios >= 8',
'android >= 4',
]
};
gulp.task( 'browser-sync', () => {
browserSync.init( {
server: {
baseDir: './',
directory: true
},
startPath: './'
} );
} );
gulp.task( 'sass', () => {
const processors = [
autoprefixer( AUTOPREFIXER_BROWSERS ),
csswring
];
return gulp.src( './src/scss/main.scss' )
.pipe( plumber( {
errorHandler: ( err ) => {
console.log( err.messageFormatted );
this.emit( 'end' );
}
} ) )
.pipe( sass() )
.pipe( gulp.dest( './build/css/' ) )
.pipe( rename( { extname: '.min.css' } ) )
.pipe( postcss( processors ) )
.pipe( gulp.dest( './build/css/' ) );
} );
gulp.task( 'rollup', () => {
return rollupStream( {
entry: './src/js/main.js',
rollup: rollup,
format: 'iife',
banner: '// @yomotsu',
cache: cache,
plugins: [
replace( {
'process.env.NODE_ENV': JSON.stringify( 'production' )
} ),
babel( {
exclude: 'node_modules/**',
presets: [ [ 'es2015', { 'loose' : true, 'modules': false } ] ],
plugins: [
// for IE9
// see https://gist.github.com/zertosh/4f818163e4d68d58c0fa
'transform-proto-to-assign',
// 'transform-object-assign'
]
} ),
nodeResolve( {
browser: true,
preferBuiltins: false,
} ),
commonjs( {
include: ['node_modules/**'],
exclude: [],
sourceMap: false,
} )
]
} )
.on( 'error', function( err ) {
console.log( 'Error : ' + err.message );
this.emit( 'end' );
} )
.on( 'bundle', ( bundle ) => { cache = bundle; } )
.pipe( source( 'main.js' ) )
.pipe( gulp.dest( './build/js/' ) )
.pipe( gulpif( production, buffer() ) )
.pipe( gulpif( production, uglify( { preserveComments: 'some' } ) ) )
.pipe( rename( { extname: '.min.js' } ) )
.pipe( gulp.dest( './build/js/' ) );
} );
gulp.task( 'watch', () => {
gulp.watch( [ './src/js/**/*.js' ], () => {
runSequence( 'rollup', browserSync.reload );
} );
gulp.watch( [ './src/scss/**/*.scss' ], () => {
runSequence( 'sass', browserSync.reload );
} );
} );
gulp.task( 'build', ( callback ) => {
production = true;
return runSequence( 'sass', 'rollup', callback );
} );
gulp.task( 'default', ( callback ) => {
return runSequence( 'browser-sync', 'sass', 'rollup', 'watch', callback );
} );
{
"name": "x",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^6.6.0",
"babel-plugin-transform-proto-to-assign": "^6.9.0",
"babel-preset-es2015": "^6.18.0",
"browser-sync": "^2.18.5",
"csswring": "^5.1.1",
"gulp": "^3.9.1",
"gulp-if": "^2.0.2",
"gulp-plumber": "^1.1.0",
"gulp-postcss": "^6.2.0",
"gulp-rename": "^1.2.2",
"gulp-sass": "^3.0.0",
"gulp-uglify": "^2.0.0",
"rollup": "^0.38.1",
"rollup-plugin-babel": "^2.7.1",
"rollup-plugin-commonjs": "^6.0.1",
"rollup-plugin-node-resolve": "^2.0.0",
"rollup-plugin-replace": "^1.1.1",
"rollup-stream": "^1.16.0",
"run-sequence": "^1.2.2",
"stream-browserify": "^2.0.1",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment