2016-11-15 08:24:20 +00:00
|
|
|
const fs = require('fs')
|
2016-10-05 23:52:50 +00:00
|
|
|
const gulp = require('gulp')
|
|
|
|
const babel = require('gulp-babel')
|
|
|
|
const cache = require('gulp-cached')
|
|
|
|
const notify_ = require('gulp-notify')
|
2016-10-13 20:01:11 +00:00
|
|
|
const benchmark = require('gulp-benchmark')
|
2016-10-10 04:18:56 +00:00
|
|
|
const sequence = require('run-sequence')
|
2016-10-05 23:52:50 +00:00
|
|
|
const webpack = require('webpack-stream')
|
|
|
|
const del = require('del')
|
2016-12-12 12:31:49 +00:00
|
|
|
const jest = require('gulp-jest')
|
2016-10-05 23:52:50 +00:00
|
|
|
|
2016-11-15 08:24:20 +00:00
|
|
|
const babelOptions = JSON.parse(fs.readFileSync('.babelrc', 'utf-8'))
|
2016-10-05 23:52:50 +00:00
|
|
|
|
|
|
|
gulp.task('compile', [
|
|
|
|
'compile-bin',
|
|
|
|
'compile-lib',
|
|
|
|
'compile-server',
|
2016-10-25 07:44:54 +00:00
|
|
|
'compile-client'
|
2016-10-05 23:52:50 +00:00
|
|
|
])
|
|
|
|
|
|
|
|
gulp.task('compile-bin', () => {
|
|
|
|
return gulp.src('bin/*')
|
|
|
|
.pipe(cache('bin'))
|
|
|
|
.pipe(babel(babelOptions))
|
|
|
|
.pipe(gulp.dest('dist/bin'))
|
|
|
|
.pipe(notify('Compiled binaries'))
|
|
|
|
})
|
|
|
|
|
|
|
|
gulp.task('compile-lib', () => {
|
|
|
|
return gulp.src('lib/**/*.js')
|
|
|
|
.pipe(cache('lib'))
|
|
|
|
.pipe(babel(babelOptions))
|
|
|
|
.pipe(gulp.dest('dist/lib'))
|
|
|
|
.pipe(notify('Compiled lib files'))
|
|
|
|
})
|
|
|
|
|
|
|
|
gulp.task('compile-server', () => {
|
|
|
|
return gulp.src('server/**/*.js')
|
|
|
|
.pipe(cache('server'))
|
|
|
|
.pipe(babel(babelOptions))
|
|
|
|
.pipe(gulp.dest('dist/server'))
|
|
|
|
.pipe(notify('Compiled server files'))
|
|
|
|
})
|
|
|
|
|
|
|
|
gulp.task('compile-client', () => {
|
|
|
|
return gulp.src('client/**/*.js')
|
|
|
|
.pipe(cache('client'))
|
|
|
|
.pipe(babel(babelOptions))
|
|
|
|
.pipe(gulp.dest('dist/client'))
|
|
|
|
.pipe(notify('Compiled client files'))
|
|
|
|
})
|
|
|
|
|
2016-11-06 17:20:10 +00:00
|
|
|
gulp.task('copy', ['copy-pages'])
|
2016-10-14 15:05:08 +00:00
|
|
|
|
|
|
|
gulp.task('copy-pages', () => {
|
|
|
|
return gulp.src('pages/**/*.js')
|
|
|
|
.pipe(gulp.dest('dist/pages'))
|
|
|
|
})
|
|
|
|
|
2016-10-13 20:01:11 +00:00
|
|
|
gulp.task('compile-bench', () => {
|
|
|
|
return gulp.src('bench/*.js')
|
|
|
|
.pipe(cache('bench'))
|
|
|
|
.pipe(babel(babelOptions))
|
|
|
|
.pipe(gulp.dest('dist/bench'))
|
|
|
|
.pipe(notify('Compiled bench files'))
|
|
|
|
})
|
|
|
|
|
|
|
|
gulp.task('copy-bench-fixtures', () => {
|
|
|
|
return gulp.src('bench/fixtures/**/*')
|
|
|
|
.pipe(gulp.dest('dist/bench/fixtures'))
|
|
|
|
})
|
2016-10-10 04:18:56 +00:00
|
|
|
|
2016-10-05 23:52:50 +00:00
|
|
|
gulp.task('build', [
|
2016-10-25 07:01:32 +00:00
|
|
|
'build-dev-client',
|
2016-12-15 19:13:40 +00:00
|
|
|
'build-client',
|
|
|
|
'build-prefetcher'
|
2016-10-05 23:52:50 +00:00
|
|
|
])
|
|
|
|
|
|
|
|
gulp.task('build-dev-client', ['compile-lib', 'compile-client'], () => {
|
|
|
|
return gulp
|
|
|
|
.src('dist/client/next-dev.js')
|
|
|
|
.pipe(webpack({
|
|
|
|
quiet: true,
|
2016-11-28 00:15:56 +00:00
|
|
|
output: { filename: 'next-dev.bundle.js', libraryTarget: 'var', library: 'require' },
|
2016-10-14 15:05:08 +00:00
|
|
|
module: {
|
|
|
|
loaders: [
|
|
|
|
{
|
|
|
|
test: /eval-script\.js$/,
|
|
|
|
exclude: /node_modules/,
|
|
|
|
loader: 'babel',
|
|
|
|
query: {
|
|
|
|
plugins: [
|
|
|
|
'babel-plugin-transform-remove-strict-mode'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
2016-10-17 02:10:16 +00:00
|
|
|
}
|
2016-10-05 23:52:50 +00:00
|
|
|
}))
|
|
|
|
.pipe(gulp.dest('dist/client'))
|
|
|
|
.pipe(notify('Built dev client'))
|
|
|
|
})
|
|
|
|
|
2016-10-25 07:01:32 +00:00
|
|
|
gulp.task('build-client', ['compile-lib', 'compile-client'], () => {
|
2016-10-05 23:52:50 +00:00
|
|
|
return gulp
|
|
|
|
.src('dist/client/next.js')
|
|
|
|
.pipe(webpack({
|
|
|
|
quiet: true,
|
2016-11-28 00:15:56 +00:00
|
|
|
output: { filename: 'next.bundle.js', libraryTarget: 'var', library: 'require' },
|
2016-10-05 23:52:50 +00:00
|
|
|
plugins: [
|
|
|
|
new webpack.webpack.DefinePlugin({
|
|
|
|
'process.env': {
|
|
|
|
NODE_ENV: JSON.stringify('production')
|
|
|
|
}
|
2016-10-09 12:45:26 +00:00
|
|
|
}),
|
|
|
|
new webpack.webpack.optimize.UglifyJsPlugin()
|
2016-10-14 15:05:08 +00:00
|
|
|
],
|
|
|
|
module: {
|
|
|
|
loaders: [
|
|
|
|
{
|
|
|
|
test: /eval-script\.js$/,
|
|
|
|
exclude: /node_modules/,
|
|
|
|
loader: 'babel',
|
|
|
|
query: {
|
|
|
|
plugins: [
|
|
|
|
'babel-plugin-transform-remove-strict-mode'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
2016-10-05 23:52:50 +00:00
|
|
|
}))
|
|
|
|
.pipe(gulp.dest('dist/client'))
|
|
|
|
.pipe(notify('Built release client'))
|
|
|
|
})
|
|
|
|
|
2016-12-15 19:13:40 +00:00
|
|
|
gulp.task('build-prefetcher', ['compile-lib', 'compile-client'], () => {
|
|
|
|
return gulp
|
|
|
|
.src('client/next-prefetcher.js')
|
|
|
|
.pipe(webpack({
|
|
|
|
quiet: true,
|
|
|
|
output: { filename: 'next-prefetcher-bundle.js' },
|
|
|
|
plugins: [
|
|
|
|
new webpack.webpack.DefinePlugin({
|
|
|
|
'process.env': {
|
|
|
|
NODE_ENV: JSON.stringify('production')
|
|
|
|
}
|
|
|
|
})
|
|
|
|
],
|
|
|
|
module: {
|
|
|
|
loaders: [
|
|
|
|
{
|
|
|
|
test: /\.js$/,
|
|
|
|
exclude: /node_modules/,
|
|
|
|
loader: 'babel',
|
|
|
|
query: {
|
|
|
|
'babelrc': false,
|
|
|
|
'presets': [
|
|
|
|
['env', {
|
|
|
|
'targets': {
|
|
|
|
// All browsers which supports service workers
|
|
|
|
'browsers': ['chrome 49', 'firefox 49', 'opera 41']
|
|
|
|
}
|
|
|
|
}]
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}))
|
|
|
|
.pipe(gulp.dest('dist/client'))
|
|
|
|
.pipe(notify('Built release prefetcher'))
|
|
|
|
})
|
|
|
|
|
2016-11-15 08:24:20 +00:00
|
|
|
gulp.task('test', () => {
|
2016-12-12 12:31:49 +00:00
|
|
|
return gulp.src('./test')
|
|
|
|
.pipe(jest.default({
|
|
|
|
coverage: true,
|
2016-11-15 08:24:20 +00:00
|
|
|
verbose: true,
|
2016-12-12 12:31:49 +00:00
|
|
|
config: {
|
|
|
|
rootDir: './test',
|
|
|
|
testEnvironment: 'node',
|
|
|
|
coveragePathIgnorePatterns: [
|
|
|
|
'test/.*'
|
|
|
|
]
|
|
|
|
}
|
2016-11-15 08:24:20 +00:00
|
|
|
}))
|
2016-10-10 04:18:56 +00:00
|
|
|
})
|
|
|
|
|
2016-11-06 17:20:10 +00:00
|
|
|
gulp.task('bench', ['compile', 'copy', 'compile-bench', 'copy-bench-fixtures'], () => {
|
2016-10-13 20:01:11 +00:00
|
|
|
return gulp.src('dist/bench/*.js', {read: false})
|
|
|
|
.pipe(benchmark({
|
|
|
|
reporters: benchmark.reporters.etalon('RegExp#test')
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
2016-10-05 23:52:50 +00:00
|
|
|
gulp.task('watch', [
|
|
|
|
'watch-bin',
|
|
|
|
'watch-lib',
|
|
|
|
'watch-server',
|
2016-11-19 21:25:07 +00:00
|
|
|
'watch-client',
|
|
|
|
'watch-pages'
|
2016-10-05 23:52:50 +00:00
|
|
|
])
|
|
|
|
|
2016-10-10 04:18:56 +00:00
|
|
|
gulp.task('watch-bin', () => {
|
2016-10-05 23:52:50 +00:00
|
|
|
return gulp.watch('bin/*', [
|
|
|
|
'compile-bin'
|
|
|
|
])
|
|
|
|
})
|
|
|
|
|
2016-10-10 04:18:56 +00:00
|
|
|
gulp.task('watch-lib', () => {
|
2016-10-05 23:52:50 +00:00
|
|
|
return gulp.watch('lib/**/*.js', [
|
|
|
|
'compile-lib',
|
2016-10-25 07:01:32 +00:00
|
|
|
'build'
|
2016-10-05 23:52:50 +00:00
|
|
|
])
|
|
|
|
})
|
|
|
|
|
2016-10-10 04:18:56 +00:00
|
|
|
gulp.task('watch-server', () => {
|
2016-10-05 23:52:50 +00:00
|
|
|
return gulp.watch('server/**/*.js', [
|
|
|
|
'compile-server'
|
|
|
|
])
|
|
|
|
})
|
|
|
|
|
2016-10-10 04:18:56 +00:00
|
|
|
gulp.task('watch-client', () => {
|
2016-10-05 23:52:50 +00:00
|
|
|
return gulp.watch('client/**/*.js', [
|
|
|
|
'compile-client',
|
2016-10-25 07:01:32 +00:00
|
|
|
'build'
|
2016-10-05 23:52:50 +00:00
|
|
|
])
|
|
|
|
})
|
|
|
|
|
2016-11-19 21:25:07 +00:00
|
|
|
gulp.task('watch-pages', () => {
|
|
|
|
return gulp.watch('pages/**/*.js', [
|
|
|
|
'copy-pages'
|
|
|
|
])
|
|
|
|
})
|
|
|
|
|
2016-10-05 23:52:50 +00:00
|
|
|
gulp.task('clean', () => {
|
2016-10-10 04:18:56 +00:00
|
|
|
return del('dist')
|
|
|
|
})
|
|
|
|
|
2016-10-05 23:52:50 +00:00
|
|
|
gulp.task('default', [
|
|
|
|
'compile',
|
|
|
|
'build',
|
2016-10-14 15:05:08 +00:00
|
|
|
'copy',
|
2016-10-10 04:18:56 +00:00
|
|
|
'test',
|
2016-10-05 23:52:50 +00:00
|
|
|
'watch'
|
|
|
|
])
|
|
|
|
|
2016-10-10 04:18:56 +00:00
|
|
|
gulp.task('release', (cb) => {
|
|
|
|
sequence('clean', [
|
|
|
|
'compile',
|
2016-10-25 07:01:32 +00:00
|
|
|
'build',
|
2016-10-14 15:05:08 +00:00
|
|
|
'copy',
|
2016-10-10 04:18:56 +00:00
|
|
|
'test'
|
2016-11-15 08:24:20 +00:00
|
|
|
], cb)
|
2016-10-10 04:18:56 +00:00
|
|
|
})
|
2016-10-05 23:52:50 +00:00
|
|
|
|
|
|
|
// avoid logging to the console
|
|
|
|
// that we created a notification
|
|
|
|
notify_.logLevel(0)
|
|
|
|
|
|
|
|
// notification helper
|
|
|
|
function notify (msg) {
|
|
|
|
return notify_({
|
|
|
|
title: '▲ Next',
|
|
|
|
message: msg,
|
|
|
|
icon: false,
|
|
|
|
onLast: true
|
|
|
|
})
|
|
|
|
}
|