1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/gulpfile.js

233 lines
5.2 KiB
JavaScript
Raw Normal View History

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')
const webpack = require('webpack')
const webpackStream = require('webpack-stream')
2016-10-05 23:52:50 +00:00
const del = require('del')
New test setup (#640) * Use jest-cli instead of gulp plugin. * Use jest-cli instead of gulp plugin. * Move fixtures into the examples dir. * Move test code of example app to the basic example. * Add isolated tests for server/resolve * Allow tests to use cheerio. * Use portfinder to get a unique port. * Move back integration tests into the example dir. * Introduce next-test-utils. * Remove gulp-jest * Add coveralls support. * Use transpiled version of code in dist. This is to make sure same file gets covered by both unit/isolated tests and integration tests. * Add support for source maps. * Use code from dist always. * Use nyc to stop instrument. * Add integration test suite for production usage. * Use jest-cli. * Add support for running e2e tests. * Check gzipPath with fs.stat before serving Otherwise, serve package might throw issues other than ENOENT * Install chromedriver with npm install. * Install chrome on travis-ci. * Add --forceExit to Jest. * Run tests only on Node v6. That's because selenium-webdriver only supports Node 6 LTS. * Use chromedriver NPM module to install chromedriver. * Use wd as the webdriver client. * Run chromedriver before tests. * Run travis for both node 4 and 6 * Remove unwanted npm install script. * Move some common text utilities to next-test-utils * Add lint checks and testing in npm prepublish hook. * Use npm on travis-ci. We are having some caching issues with yarn and chromedriver. * Make tests work on windows.\n But chromedriver doesn't work. * Clean up dependencies. * Run chromedriver in background without any tools. * Fix a typo in the code. * Use ES6 features used in node4 inside the gulpfile. * Add some comments. * Add support for running in windows. * Stop chromedriver properly on windows. * Fix typos.
2017-01-12 04:14:49 +00:00
const childProcess = require('child_process')
2016-10-05 23:52:50 +00:00
New test setup (#640) * Use jest-cli instead of gulp plugin. * Use jest-cli instead of gulp plugin. * Move fixtures into the examples dir. * Move test code of example app to the basic example. * Add isolated tests for server/resolve * Allow tests to use cheerio. * Use portfinder to get a unique port. * Move back integration tests into the example dir. * Introduce next-test-utils. * Remove gulp-jest * Add coveralls support. * Use transpiled version of code in dist. This is to make sure same file gets covered by both unit/isolated tests and integration tests. * Add support for source maps. * Use code from dist always. * Use nyc to stop instrument. * Add integration test suite for production usage. * Use jest-cli. * Add support for running e2e tests. * Check gzipPath with fs.stat before serving Otherwise, serve package might throw issues other than ENOENT * Install chromedriver with npm install. * Install chrome on travis-ci. * Add --forceExit to Jest. * Run tests only on Node v6. That's because selenium-webdriver only supports Node 6 LTS. * Use chromedriver NPM module to install chromedriver. * Use wd as the webdriver client. * Run chromedriver before tests. * Run travis for both node 4 and 6 * Remove unwanted npm install script. * Move some common text utilities to next-test-utils * Add lint checks and testing in npm prepublish hook. * Use npm on travis-ci. We are having some caching issues with yarn and chromedriver. * Make tests work on windows.\n But chromedriver doesn't work. * Clean up dependencies. * Run chromedriver in background without any tools. * Fix a typo in the code. * Use ES6 features used in node4 inside the gulpfile. * Add some comments. * Add support for running in windows. * Stop chromedriver properly on windows. * Fix typos.
2017-01-12 04:14:49 +00:00
const isWindows = /^win/.test(process.platform)
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',
'compile-client',
'remove-strict-mode'
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'))
})
gulp.task('remove-strict-mode', ['compile-lib'], () => {
return gulp.src('dist/lib/eval-script.js')
.pipe(babel({
babelrc: false,
plugins: ['babel-plugin-transform-remove-strict-mode']
}))
.pipe(gulp.dest('dist/lib'))
.pipe(notify('Completed removing strict mode for eval script'))
})
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', [
'build-prefetcher'
2016-10-05 23:52:50 +00:00
])
gulp.task('build-prefetcher', ['compile-lib', 'compile-client'], () => {
return gulp
.src('client/next-prefetcher.js')
.pipe(webpackStream({
output: { filename: 'next-prefetcher-bundle.js' },
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production')
}
})
],
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
babelrc: false,
presets: [
['env', {
targets: {
// All browsers which supports service workers
browsers: ['chrome 49', 'firefox 49', 'opera 41']
}
}]
]
}
}
]
}
}, webpack))
.pipe(gulp.dest('dist/client'))
.pipe(notify('Built release prefetcher'))
})
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-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-11-15 08:24:20 +00:00
], cb)
2016-10-10 04:18:56 +00:00
})
2016-10-05 23:52:50 +00:00
New test setup (#640) * Use jest-cli instead of gulp plugin. * Use jest-cli instead of gulp plugin. * Move fixtures into the examples dir. * Move test code of example app to the basic example. * Add isolated tests for server/resolve * Allow tests to use cheerio. * Use portfinder to get a unique port. * Move back integration tests into the example dir. * Introduce next-test-utils. * Remove gulp-jest * Add coveralls support. * Use transpiled version of code in dist. This is to make sure same file gets covered by both unit/isolated tests and integration tests. * Add support for source maps. * Use code from dist always. * Use nyc to stop instrument. * Add integration test suite for production usage. * Use jest-cli. * Add support for running e2e tests. * Check gzipPath with fs.stat before serving Otherwise, serve package might throw issues other than ENOENT * Install chromedriver with npm install. * Install chrome on travis-ci. * Add --forceExit to Jest. * Run tests only on Node v6. That's because selenium-webdriver only supports Node 6 LTS. * Use chromedriver NPM module to install chromedriver. * Use wd as the webdriver client. * Run chromedriver before tests. * Run travis for both node 4 and 6 * Remove unwanted npm install script. * Move some common text utilities to next-test-utils * Add lint checks and testing in npm prepublish hook. * Use npm on travis-ci. We are having some caching issues with yarn and chromedriver. * Make tests work on windows.\n But chromedriver doesn't work. * Clean up dependencies. * Run chromedriver in background without any tools. * Fix a typo in the code. * Use ES6 features used in node4 inside the gulpfile. * Add some comments. * Add support for running in windows. * Stop chromedriver properly on windows. * Fix typos.
2017-01-12 04:14:49 +00:00
// We run following task inside a NPM script chain and it runs chromedriver
// inside a child process tree.
// Even though we kill this task's process, chromedriver exists throughout
// the lifetime of the original npm script.
gulp.task('start-chromedriver', ['stop-chromedriver'], (cb) => {
const processName = isWindows? 'chromedriver.cmd' : 'chromedriver'
const chromedriver = childProcess.spawn(processName, { stdio: 'inherit' })
const timeoutHandler = setTimeout(() => {
// We need to do this, otherwise this task's process will keep waiting.
process.exit(0)
}, 2000)
})
gulp.task('stop-chromedriver', () => {
try {
if (isWindows) {
childProcess.execSync('taskkill /im chromedriver* /t /f', { stdio: 'ignore' })
} else {
childProcess.execSync('pkill chromedriver', { stdio: 'ignore' })
}
} catch(ex) {
// Do nothing
}
})
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
})
}