diff options
author | Michael Lando <ml636r@att.com> | 2017-02-19 12:57:33 +0200 |
---|---|---|
committer | Michael Lando <ml636r@att.com> | 2017-02-19 13:47:13 +0200 |
commit | efa037d34be7b1570efdc767c79fad8d4005f10e (patch) | |
tree | cf1036ba2728dea8a61492b678fa91954e629403 /openecomp-ui/gulpfile.js | |
parent | f5f13c4f6b6fe3b4d98e349dfd7db59339803436 (diff) |
Add new code new version
Change-Id: Ic02a76313503b526f17c3df29eb387a29fe6a42a
Signed-off-by: Michael Lando <ml636r@att.com>
Diffstat (limited to 'openecomp-ui/gulpfile.js')
-rw-r--r-- | openecomp-ui/gulpfile.js | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/openecomp-ui/gulpfile.js b/openecomp-ui/gulpfile.js new file mode 100644 index 0000000000..57885ec6ca --- /dev/null +++ b/openecomp-ui/gulpfile.js @@ -0,0 +1,292 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +'use strict'; + +var path = require('path'); +var gulp = require('gulp'); +var gulpHelpers = require('gulp-helpers'); +var taskMaker = gulpHelpers.taskMaker(gulp); +var _ = gulpHelpers.framework('_'); +var runSequence = gulpHelpers.framework('run-sequence'); +var i18nTask = require('./tools/gulp/tasks/i18n'); +var prodTask = require('./tools/gulp/tasks/prod'); +var gulpCssUsage = require('gulp-css-usage').default; +var webpack = require('webpack'); +var WebpackDevServer = require('webpack-dev-server'); + +var localDevConfig = {}; +try { + localDevConfig = require('./devConfig'); +} catch (e) { +} +var devConfig = Object.assign({}, require('./devConfig.defaults'), localDevConfig); +var webpackConfig = require('./webpack.config'); + +function defineTasks(mode) { + let appName = 'onboarding'; + let dist = 'dist/' + mode + '/'; + + let path = { + locales: 'i18n/', + jssource: 'src/**/*.js', + jsxsource: 'src/**/*.jsx', + html: '**/*.html', + output: dist, + assets: './resources/**/*.{css,png,svg,eot,ttf,woff,woff2,otf}', + json: './src/**/*.json', + index: './src/index.html', + heat: './src/heat.html', + watch: ['./src/**'], + scss: './resources/scss/**/*.scss', + css: dist + '/css', + war: [dist + 'index.html', dist + 'punch-outs_en.js', dist + '**/*.{css,png,svg,eot,ttf,woff,woff2,otf}', dist + '**/*(config.json|locale.json)', 'tools/gulp/deployment/**', 'webapp-onboarding/**'], + heatWar: [dist + 'heat.html', dist + 'heat-validation_en.js', dist + '**/*.{css,png,svg,eot,ttf,woff,woff2,otf}', dist + '**/*(config.json|locale.json)', 'webapp-heat-validation/**'], + wardest: 'dist/' + }; + + taskMaker.defineTask('clean', {taskName: 'clean', src: path.output}); + taskMaker.defineTask('copy', {taskName: 'copy-assets', src: path.assets, dest: path.output}); + taskMaker.defineTask('copy', { + taskName: 'copy-json', + src: path.json, + dest: path.output, + changed: {extension: '.json'} + }); + taskMaker.defineTask('copy', { + taskName: 'copy-index.html', + src: path.index, + dest: path.output, + rename: 'index.html' + }); + taskMaker.defineTask('copy', { + taskName: 'copy-heat.html', + src: path.heat, + dest: path.output, + rename: 'heat.html' + }); + taskMaker.defineTask('sass', { + taskName: 'sass', + src: path.scss, + dest: path.css, + config: {outputStyle: 'compressed'} + }); + taskMaker.defineTask('compress', { + taskName: 'compress-war', + src: path.war, + filename: appName + '.war', + dest: path.wardest + }); + taskMaker.defineTask('compress', { + taskName: 'compress-heat-war', + src: path.heatWar, + filename: 'heat-validation.war', + dest: path.wardest + }); + taskMaker.defineTask('watch', { + taskName: 'watch-stuff', + src: [path.assets, path.json, path.index, path.heat], + tasks: ['copy-stuff'] + }); + taskMaker.defineTask('watch', {taskName: 'watch-sass', src: path.scss, tasks: ['sass']}); + + gulp.task('copy-stuff', callback => { + return runSequence(['copy-assets', 'copy-json', 'copy-index.html', 'copy-heat.html'], callback); + }); + + gulp.task('i18n', () => { + return i18nTask({ + outputPath: path.output, + localesPath: path.locales, + lang: 'en' + }).catch(err => { + console.log('i18n Task : Error! ', err); + throw err; + }); + }); + + + gulp.task('dependencies', () => { + //TODO: + }); + +} + +gulp.task('dev', callback => { + defineTasks('dev'); + return runSequence('clean', ['i18n', 'copy-stuff'], 'webpack-dev-server', ['watch-stuff'], callback); +}); + +// Production build +gulp.task('build', callback => { + defineTasks('prod'); + return runSequence('clean', ['copy-stuff', 'i18n'], 'prod', ['compress-war', 'compress-heat-war'], callback); +}); + +gulp.task('default', ['dev']); + +gulp.task('prod', () => { + + // configure webpack for production + let webpackProductionConfig = Object.create(webpackConfig); + + for (let name in webpackProductionConfig.entry) { + webpackProductionConfig.entry[name] = webpackProductionConfig.entry[name].filter(path => !path.startsWith('webpack')); + } + + webpackProductionConfig.cache = true; + webpackProductionConfig.output = { + path: path.join(__dirname, 'dist/prod'), + publicPath: '/onboarding/', + filename: '[name].js' + }; + webpackProductionConfig.resolveLoader = { + root: [path.resolve('.')], + alias: { + 'config-json-loader': 'tools/webpack/config-json-loader/index.js' + } + }; + + // remove source maps + webpackProductionConfig.devtool = undefined; + webpackProductionConfig.module.preLoaders = webpackProductionConfig.module.preLoaders.filter(preLoader => preLoader.loader != 'source-map-loader'); + webpackProductionConfig.module.loaders.forEach(loader => { + if (loader.loaders && loader.loaders[0] === 'style') { + loader.loaders = loader.loaders.map(loaderName => loaderName.replace('?sourceMap', '')); + } + }); + + webpackProductionConfig.module.loaders.push({test: /config.json$/, loaders: ['config-json-loader']}); + webpackProductionConfig.eslint = { + configFile: './.eslintrc', + failOnError: true + }; + webpackProductionConfig.babel = {//TODO: remove this when UglifyJS will support user or + // Webpack 2.0 + presets: ['es2015', 'stage-0', 'react'] + } + webpackProductionConfig.plugins = [ + new webpack.DefinePlugin({ + 'process.env': { + // This has effect on the react lib size + 'NODE_ENV': JSON.stringify('production') + }, + DEBUG: false, + DEV: false + }), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.UglifyJsPlugin() + ]; + + // run production build + return prodTask({ + webpackProductionConfig, + outDir: 'dist/prod' + }) + .then(() => { + }) + .catch(err => { + if (err && err.stack) { + console.error(err, err.stack); + } + throw new Error('Webpack build FAILED'); + }); +}); + +gulp.task('webpack-dev-server', () => { + // modify some webpack config options for development + let myConfig = Object.create(webpackConfig); + + myConfig.devServer.setup = server => { + let fixture = require('./fixture/fixture'); + let proxy = require('http-proxy-middleware'); + let proxyConfigDefaults = { + changeOrigin: true, + secure: false, + onProxyRes: (proxyRes, req, res) => { + let setCookie = proxyRes.headers['set-cookie']; + if (setCookie) { + setCookie[0] = setCookie[0].replace(/\bSecure\b(; )?/, ''); + } + } + }; + + let middlewares = [ + (req, res, next) => { + let match = req.url.match(/^(.*)_en.js$/); + let newUrl = match && match[1] + '.js'; + if (newUrl) { + console.log(`REWRITING URL: ${req.url} -> ${newUrl}`); + req.url = newUrl; + } + next(); + }, + fixture({ + enabled: devConfig.useFixture + }) + ]; + + // standalon back-end (proxyTarget) has higher priority, so it should be first + if (devConfig.proxyTarget) { + middlewares.push( + proxy(['/api', '/onboarding-api', '/sdc1/feProxy/onboarding-api'], Object.assign({}, proxyConfigDefaults, { + target: devConfig.proxyTarget, + pathRewrite: { + '/sdc1/feProxy/onboarding-api': '/onboarding-api' + } + })) + ) + } + + // Ecorp environment (proxyATTTarget) has lower priority, so it should be second + if (devConfig.proxyATTTarget) { + middlewares.push( + proxy(['/sdc1', '/onboarding-api'], Object.assign({}, proxyConfigDefaults, { + target: devConfig.proxyATTTarget, + pathRewrite: { + // Workaround for some weird proxy issue + '/sdc1/feProxy/onboarding-api': '/sdc1/feProxy/onboarding-api', + '/onboarding-api': '/sdc1/feProxy/onboarding-api' + } + })) + ) + } + server.use(middlewares); + }; + + // Start a webpack-dev-server + let server = new WebpackDevServer(webpack(myConfig), myConfig.devServer); + server.listen(myConfig.devServer.port, '0.0.0.0', err => { + if (err) { + throw new Error('webpack-dev-server' + err); + } + }); +}); + + +gulp.task('gulp-css-usage', callback => { + return gulp.src('src/**/*.jsx').pipe(gulpCssUsage({css: 'dist/dev/css/style.css', babylon: ['objectRestSpread']})); +}); + +gulp.task('css-usage', callback => { + defineTasks('dev'); + runSequence('sass', 'gulp-css-usage'); +}); + |