Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F10750959
gulpfile.babel.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Referenced Files
None
Subscribers
None
gulpfile.babel.js
View Options
'use strict'
;
import
plugins
from
'gulp-load-plugins'
;
import
yargs
from
'yargs'
;
import
browser
from
'browser-sync'
;
import
gulp
from
'gulp'
;
import
panini
from
'panini'
;
import
rimraf
from
'rimraf'
;
import
sherpa
from
'style-sherpa'
;
import
yaml
from
'js-yaml'
;
import
fs
from
'fs'
;
import
webpackStream
from
'webpack-stream'
;
import
webpack2
from
'webpack'
;
import
named
from
'vinyl-named'
;
// Load all Gulp plugins into one variable
const
$
=
plugins
();
// Check for --production flag
const
PRODUCTION
=
!!
(
yargs
.
argv
.
production
);
// Load settings from settings.yml
const
{
COMPATIBILITY
,
PORT
,
UNCSS_OPTIONS
,
PATHS
}
=
loadConfig
();
function
loadConfig
()
{
let
ymlFile
=
fs
.
readFileSync
(
'config.yml'
,
'utf8'
);
return
yaml
.
load
(
ymlFile
);
}
// Build the "dist" folder by running all of the below tasks
gulp
.
task
(
'build'
,
gulp
.
series
(
clean
,
gulp
.
parallel
(
pages
,
sass
,
javascript
,
images
,
copy
)));
// Build the site, run the server, and watch for file changes
gulp
.
task
(
'default'
,
gulp
.
series
(
'build'
,
server
,
watch
));
// Delete the "dist" folder
// This happens every time a build starts
function
clean
(
done
)
{
rimraf
(
PATHS
.
dist
,
done
);
}
// Copy files out of the assets folder
// This task skips over the "img", "js", and "scss" folders, which are parsed separately
function
copy
()
{
return
gulp
.
src
(
PATHS
.
assets
)
.
pipe
(
gulp
.
dest
(
PATHS
.
dist
+
'/assets'
));
}
// Copy page templates into finished HTML files
function
pages
()
{
return
gulp
.
src
(
'src/pages/**/*.{html,hbs,handlebars}'
)
.
pipe
(
panini
({
root
:
'src/pages/'
,
layouts
:
'src/layouts/'
,
partials
:
'src/partials/'
,
data
:
'src/data/'
,
helpers
:
'src/helpers/'
}))
.
pipe
(
gulp
.
dest
(
PATHS
.
dist
));
}
// Load updated HTML templates and partials into Panini
function
resetPages
(
done
)
{
panini
.
refresh
();
done
();
}
// Compile Sass into CSS
// In production, the CSS is compressed
function
sass
()
{
return
gulp
.
src
(
'src/assets/scss/app.scss'
)
.
pipe
(
$
.
sourcemaps
.
init
())
.
pipe
(
$
.
sass
({
includePaths
:
PATHS
.
sass
})
.
on
(
'error'
,
$
.
sass
.
logError
))
.
pipe
(
$
.
autoprefixer
({
browsers
:
COMPATIBILITY
}))
// Comment in the pipe below to run UnCSS in production
//.pipe($.if(PRODUCTION, $.uncss(UNCSS_OPTIONS)))
.
pipe
(
$
.
if
(
PRODUCTION
,
$
.
cleanCss
({
compatibility
:
'ie9'
})))
.
pipe
(
$
.
if
(
!
PRODUCTION
,
$
.
sourcemaps
.
write
()))
.
pipe
(
gulp
.
dest
(
PATHS
.
dist
+
'/assets/css'
))
.
pipe
(
browser
.
reload
({
stream
:
true
}));
}
let
webpackConfig
=
{
module
:
{
rules
:
[
{
test
:
/.js$/
,
use
:
[
{
loader
:
'babel-loader'
}
]
}
]
}
}
// Combine JavaScript into one file
// In production, the file is minified
function
javascript
()
{
return
gulp
.
src
(
PATHS
.
entries
)
.
pipe
(
named
())
.
pipe
(
$
.
sourcemaps
.
init
())
.
pipe
(
webpackStream
(
webpackConfig
,
webpack2
))
.
pipe
(
$
.
if
(
PRODUCTION
,
$
.
uglify
()
.
on
(
'error'
,
e
=>
{
console
.
log
(
e
);
})
))
.
pipe
(
$
.
if
(
!
PRODUCTION
,
$
.
sourcemaps
.
write
()))
.
pipe
(
gulp
.
dest
(
PATHS
.
dist
+
'/assets/js'
));
}
// Copy images to the "dist" folder
// In production, the images are compressed
function
images
()
{
return
gulp
.
src
(
'src/assets/img/**/*'
)
.
pipe
(
$
.
if
(
PRODUCTION
,
$
.
imagemin
({
progressive
:
true
})))
.
pipe
(
gulp
.
dest
(
PATHS
.
dist
+
'/assets/img'
));
}
// Start a server with BrowserSync to preview the site in
function
server
(
done
)
{
browser
.
init
({
server
:
PATHS
.
dist
,
port
:
PORT
});
done
();
}
// Reload the browser with BrowserSync
function
reload
(
done
)
{
browser
.
reload
();
done
();
}
// Watch for changes to static assets, pages, Sass, and JavaScript
function
watch
()
{
gulp
.
watch
(
PATHS
.
assets
,
copy
);
gulp
.
watch
(
'src/pages/**/*.html'
).
on
(
'all'
,
gulp
.
series
(
pages
,
browser
.
reload
));
gulp
.
watch
(
'src/{layouts,partials}/**/*.html'
).
on
(
'all'
,
gulp
.
series
(
resetPages
,
pages
,
browser
.
reload
));
gulp
.
watch
(
'src/assets/scss/**/*.scss'
).
on
(
'all'
,
sass
);
gulp
.
watch
(
'src/assets/js/**/*.js'
).
on
(
'all'
,
gulp
.
series
(
javascript
,
browser
.
reload
));
gulp
.
watch
(
'src/assets/img/**/*'
).
on
(
'all'
,
gulp
.
series
(
images
,
browser
.
reload
));
}
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Sun, Jul 27, 20:41 (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2847603
Default Alt Text
gulpfile.babel.js (4 KB)
Attached To
Mode
rRAIN Rain ambiant screen
Attached
Detach File
Event Timeline
Log In to Comment