diff --git a/gulpfile.js b/gulpfile.js index 7b2d7c188a..062e15c405 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -10,48 +10,31 @@ const Rx = require('rx'), yargs = require('yargs'), sortKeys = require('sort-keys'), del = require('del'), - // utils plumber = require('gulp-plumber'), notify = require('gulp-notify'), gutil = require('gulp-util'), reduce = require('gulp-reduce-file'), - concat = require('gulp-concat'), - uglify = require('gulp-uglify'), - merge = require('merge-stream'), sourcemaps = require('gulp-sourcemaps'), - // react app webpack = require('webpack'), webpackStream = require('webpack-stream'), webpackDevMiddleware = require('webpack-dev-middleware'), webpackHotMiddleware = require('webpack-hot-middleware'), webpackConfig = require('./webpack.config.js'), - // server process nodemon = require('gulp-nodemon'), browserSync = require('browser-sync'), - // css less = require('gulp-less'), - // rev rev = require('gulp-rev'), revDel = require('rev-del'), - { createPathMigrationMap } = require('./seed/createPathMigrationMap'); Rx.config.longStackSupport = true; const sync = browserSync.create('fcc-sync-server'); -function resolve(filepath, thisString, withThisString) { - const newPath = require.resolve(filepath); - if (thisString && withThisString) { - return newPath.replace(thisString, withThisString); - } - return newPath; -} - // user definable const __DEV__ = !yargs.argv.p; const host = process.env.HOST || 'localhost'; @@ -59,7 +42,8 @@ const port = yargs.argv.port || process.env.PORT || '3001'; const syncPort = yargs.argv['sync-port'] || process.env.SYNC_PORT || '3000'; // make sure sync ui port does not interfere with proxy port -const syncUIPort = yargs.argv['sync-ui-port'] || +const syncUIPort = + yargs.argv['sync-ui-port'] || process.env.SYNC_UI_PORT || parseInt(syncPort, 10) + 2; @@ -78,56 +62,13 @@ const paths = { publicJs: './public/js', css: 'public/css', - loopback: { - client: './client/loopbackClient', - root: path.join(__dirname, 'client/'), - clientName: 'lbApp' - }, - client: { src: './client', dest: 'public/js' }, - vendorChallenges: [ - resolve('jshint', 'src', 'dist'), - resolve('chai', 'index.js', 'chai.js'), - resolve('codemirror'), - resolve('codemirror', 'lib/codemirror.js', 'addon/comment/comment.js'), - resolve('codemirror', 'lib/codemirror.js', 'addon/edit/closebrackets.js'), - resolve('codemirror', 'lib/codemirror.js', 'addon/edit/matchbrackets.js'), - resolve('codemirror', 'lib/codemirror.js', 'addon/lint/lint.js'), - resolve('codemirror', 'lib/codemirror.js', 'addon/lint/javascript-lint.js'), - resolve('codemirror', 'lib/codemirror.js', 'mode/javascript/javascript.js'), - resolve('codemirror', 'lib/codemirror.js', 'mode/jsx/jsx.js'), - resolve('codemirror', 'lib/codemirror.js', 'mode/xml/xml.js'), - resolve('codemirror', 'lib/codemirror.js', 'mode/css/css.js'), - resolve('codemirror', 'lib/codemirror.js', 'mode/htmlmixed/htmlmixed.js'), - resolve('emmet-codemirror'), - 'public/js/lib/loop-protect/loop-protect.js' - ], - - vendorMain: [ - resolve('jquery', '.js', '.min.js'), - resolve('bootstrap', 'npm.js', 'bootstrap.min.js'), - resolve('d3', '.js', '.min.js'), - resolve('cal-heatmap'), - resolve('moment', '.js', '.min.js'), - resolve( - 'moment-timezone', - 'index.js', - 'builds/moment-timezone-with-data.min.js' - ), - resolve('mousetrap', '.js', '.min.js'), - resolve('lightbox2', '.js', '.min.js'), - resolve('rx', 'index.js', 'dist/rx.all.min.js') - ], - less: './client/less/main.less', - lessFiles: [ - './client/**/*.less', - './common/**/*.less' - ], + lessFiles: ['./client/**/*.less', './common/**/*.less'], manifest: 'server/manifests/', @@ -136,13 +77,7 @@ const paths = { dest: 'common/app' }, - syncWatch: [ - 'public/**/*.*' - ], - - challenges: [ - 'seed/challenges/*/*.json' - ] + syncWatch: ['public/**/*.*'] }; const errorNotifier = notify.onError({ @@ -199,20 +134,16 @@ gulp.task('serve', function(cb) { } }); - process.once('SIGINT', () => { - monitor.once('exit', () => { - /* eslint-disable no-process-exit */ - process.exit(0); - /* eslint-enable no-process-exit */ - }); + process.once('SIGINT', () => { + monitor.once('exit', () => { + /* eslint-disable no-process-exit */ + process.exit(0); + /* eslint-enable no-process-exit */ }); + }); }); -const syncDepenedents = [ - 'serve', - 'js', - 'less' -]; +const syncDepenedents = ['serve', 'less']; gulp.task('dev-server', syncDepenedents, function() { webpackConfig.entry.bundle = [ @@ -246,17 +177,20 @@ gulp.task('dev-server', syncDepenedents, function() { }); gulp.task('pack-client', function() { - if (!__DEV__) { console.log('\n\nbundling www - production\n\n'); } + if (!__DEV__) { + console.log('\n\nbundling www - production\n\n'); + } const dest = webpackConfig.output.path; - return gulp.src(webpackConfig.entry.bundle) + return gulp + .src(webpackConfig.entry.bundle) .pipe(plumber({ errorHandler })) .pipe(webpackStream(webpackConfig)) .pipe(gulp.dest(dest)); }); -const webpackManifestFiles = [ 'react-manifest.json', 'chunk-manifest.json' ]; +const webpackManifestFiles = ['react-manifest.json', 'chunk-manifest.json']; gulp.task('move-webpack-manifest', ['pack-client'], function() { const files = webpackManifestFiles.map(function(filename) { return path.join(webpackConfig.output.path, filename); @@ -266,9 +200,11 @@ gulp.task('move-webpack-manifest', ['pack-client'], function() { const cleanDeps = ['pack-client', 'move-webpack-manifest']; gulp.task('clean-webpack-manifest', cleanDeps, function() { - return del(webpackManifestFiles.map(function(filename) { - return path.join(webpackConfig.output.path, filename); - })) + return del( + webpackManifestFiles.map(function(filename) { + return path.join(webpackConfig.output.path, filename); + }) + ) .then(function(pathsDeleted) { gutil.log('[clean-webpack-manifest]', 'paths deleted' + pathsDeleted); }) @@ -280,89 +216,33 @@ gulp.task('clean-webpack-manifest', cleanDeps, function() { gulp.task('less', function() { const manifestName = 'css-manifest.json'; const dest = paths.css; - return gulp.src(paths.less) - .pipe(plumber({ errorHandler })) - .pipe(__DEV__ ? sourcemaps.init() : gutil.noop()) - // compile - .pipe(less({ - paths: [ - path.join(__dirname, 'client', 'less'), - path.join(__dirname, 'common') - ] - })) - .pipe(__DEV__ ? - sourcemaps.write({ sourceRoot: '/less' }) : - gutil.noop() - ) - .pipe(gulp.dest(dest)) - // add revision - .pipe(__DEV__ ? gutil.noop() : rev()) - // copy files to public - .pipe(__DEV__ ? gutil.noop() : gulp.dest(dest)) - // create and merge manifest - .pipe(__DEV__ ? gutil.noop() : rev.manifest(manifestName)) - .pipe(__DEV__ ? gutil.noop() : delRev( - dest, - manifestName - )) - .pipe(__DEV__ ? gutil.noop() : gulp.dest(paths.manifest)); -}); - -function getFilesGlob(files) { - if (!__DEV__) { - return files; - } - return files.map(function(file) { - return file - .replace('.min.', '.') - // moment breaks the pattern - .replace('/min/', '/'); - }); -} - -gulp.task('js', function() { - const manifestName = 'js-manifest.json'; - const dest = paths.publicJs; - - const jsFiles = merge( - - gulp.src(getFilesGlob(paths.vendorMain)) + return ( + gulp + .src(paths.less) + .pipe(plumber({ errorHandler })) .pipe(__DEV__ ? sourcemaps.init() : gutil.noop()) - .pipe(concat('vendor-main.js')) + // compile .pipe( - __DEV__ ? - sourcemaps.write({ sourceRoot: '/vendor' }) : - gutil.noop() - ), - - gulp.src(paths.vendorChallenges) - .pipe(__DEV__ ? sourcemaps.init() : gutil.noop()) - .pipe(__DEV__ ? gutil.noop() : uglify()) - .pipe(concat('vendor-challenges.js')) - .pipe( - __DEV__ ? - sourcemaps.write({ sourceRoot: '/vendor' }) : - gutil.noop() + less({ + paths: [ + path.join(__dirname, 'client', 'less'), + path.join(__dirname, 'common') + ] + }) ) + .pipe(__DEV__ ? sourcemaps.write({ sourceRoot: '/less' }) : gutil.noop()) + .pipe(gulp.dest(dest)) + // add revision + .pipe(__DEV__ ? gutil.noop() : rev()) + // copy files to public + .pipe(__DEV__ ? gutil.noop() : gulp.dest(dest)) + // create and merge manifest + .pipe(__DEV__ ? gutil.noop() : rev.manifest(manifestName)) + .pipe(__DEV__ ? gutil.noop() : delRev(dest, manifestName)) + .pipe(__DEV__ ? gutil.noop() : gulp.dest(paths.manifest)) ); - - return jsFiles - .pipe(gulp.dest(dest)) - // create registry file - .pipe(__DEV__ ? gutil.noop() : rev()) - // copy revisioned assets to dest - .pipe(__DEV__ ? gutil.noop() : gulp.dest(dest)) - // create manifest file - .pipe(__DEV__ ? gutil.noop() : rev.manifest(manifestName)) - .pipe(__DEV__ ? gutil.noop() : delRev( - dest, - manifestName - )) - // copy manifest file to dest - .pipe(__DEV__ ? gutil.noop() : gulp.dest(paths.manifest)); }); - const collector = (file, memo) => Object.assign(memo, JSON.parse(file.contents)); @@ -370,15 +250,11 @@ function done(manifest) { return sortKeys(manifest); } -const buildDependents = [ - 'less', - 'js', - 'pack-client', - 'move-webpack-manifest' -]; +const buildDependents = ['less', 'pack-client', 'move-webpack-manifest']; gulp.task('build-manifest', buildDependents, function() { - return gulp.src(paths.manifest + '*.json') + return gulp + .src(paths.manifest + '*.json') .pipe(reduce('rev-manifest.json', collector, done, {})) .pipe(gulp.dest('server/')); }); @@ -389,7 +265,6 @@ gulp.task('generate-migration-map', done => { gulp.task('build', [ 'less', - 'js', 'pack-client', 'move-webpack-manifest', 'clean-webpack-manifest', @@ -397,16 +272,10 @@ gulp.task('build', [ 'generate-migration-map' ]); -const watchDependents = [ - 'less', - 'js', - 'serve', - 'dev-server' -]; +const watchDependents = ['less', 'serve', 'dev-server']; gulp.task('watch', watchDependents, function() { gulp.watch(paths.lessFiles, ['less']); - gulp.watch(paths.vendorChallenges, ['js']); }); gulp.task('default', [ diff --git a/package-lock.json b/package-lock.json index 684b870da2..15e4165c21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4052,15 +4052,6 @@ "typedarray": "0.0.6" } }, - "concat-with-sourcemaps": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz", - "integrity": "sha1-9Vs74q60dgGxCi1SWcz7cP0vHdY=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, "configstore": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", @@ -8514,51 +8505,6 @@ "vinyl-sourcemaps-apply": "0.2.1" } }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", - "dev": true, - "requires": { - "concat-with-sourcemaps": "1.0.4", - "through2": "2.0.3", - "vinyl": "2.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - } - } - }, "gulp-less": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-3.3.2.tgz", @@ -8717,22 +8663,6 @@ } } }, - "gulp-uglify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-2.1.2.tgz", - "integrity": "sha1-bbhbHQ7mPRgFhZK2WGSdZcLsRUE=", - "dev": true, - "requires": { - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash": "4.17.5", - "make-error-cause": "1.2.2", - "through2": "2.0.3", - "uglify-js": "2.8.29", - "uglify-save-license": "0.4.1", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, "gulp-util": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", @@ -12270,21 +12200,6 @@ } } }, - "make-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", - "dev": true - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "requires": { - "make-error": "1.3.0" - } - }, "make-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz", @@ -12432,15 +12347,6 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "2.2.7" - } - }, "method-override": { "version": "2.3.10", "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", @@ -19473,12 +19379,6 @@ } } }, - "uglify-save-license": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", - "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", - "dev": true - }, "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", diff --git a/package.json b/package.json index 73d40c04a8..7024c0a69d 100644 --- a/package.json +++ b/package.json @@ -172,7 +172,6 @@ "eslint-plugin-import": "^2.9.0", "gulp": "^3.9.1", "gulp-babel": "^6.1.1", - "gulp-concat": "^2.6.0", "gulp-less": "^3.0.3", "gulp-nodemon": "^2.0.3", "gulp-notify": "^3.0.0", @@ -180,7 +179,6 @@ "gulp-reduce-file": "0.0.1", "gulp-rev": "^7.0.0", "gulp-sourcemaps": "^2.2.1", - "gulp-uglify": "^2.0.0", "gulp-util": "^3.0.6", "husky": "^0.14.3", "istanbul-coveralls": "^1.0.3", @@ -190,7 +188,6 @@ "json-loader": "~0.5.2", "less": "^2.5.1", "loopback-component-explorer": "^2.1.1", - "merge-stream": "^1.0.0", "pm2": "^2.10.2", "proxyquire": "^1.7.10", "react-hot-loader": "^1.3.0",