Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 1F39F200CA3 for ; Thu, 1 Jun 2017 15:23:20 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 1DF12160BE8; Thu, 1 Jun 2017 13:23:20 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 117F8160BE4 for ; Thu, 1 Jun 2017 15:23:17 +0200 (CEST) Received: (qmail 14178 invoked by uid 500); 1 Jun 2017 13:23:17 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 13973 invoked by uid 99); 1 Jun 2017 13:23:17 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 01 Jun 2017 13:23:17 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id E9F2ADFDC8; Thu, 1 Jun 2017 13:23:16 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: agoncharuk@apache.org To: commits@ignite.apache.org Date: Thu, 01 Jun 2017 13:23:16 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [01/50] [abbrv] ignite git commit: IGNITE-5200 Reworked webpack build. archived-at: Thu, 01 Jun 2017 13:23:20 -0000 Repository: ignite Updated Branches: refs/heads/ignite-5267 3a44e3ac1 -> 9d75ff8cd IGNITE-5200 Reworked webpack build. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/88fd1a63 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/88fd1a63 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/88fd1a63 Branch: refs/heads/ignite-5267 Commit: 88fd1a63f0fe8b856cbb42c750a9f3b4efced530 Parents: 52e14ac Author: Andrey Novikov Authored: Mon May 29 10:11:24 2017 +0700 Committer: Andrey Novikov Committed: Mon May 29 10:11:24 2017 +0700 ---------------------------------------------------------------------- modules/web-console/frontend/.babelrc | 9 +- modules/web-console/frontend/.gitignore | 1 - modules/web-console/frontend/app/app.js | 18 +- .../components/web-console-header/component.js | 6 +- .../app/modules/agent/AgentManager.service.js | 2 - .../frontend/gulpfile.babel.js/index.js | 26 --- .../frontend/gulpfile.babel.js/paths.js | 64 ------ .../frontend/gulpfile.babel.js/tasks/build.js | 21 -- .../frontend/gulpfile.babel.js/tasks/bundle.js | 36 ---- .../frontend/gulpfile.babel.js/tasks/clean.js | 32 --- .../frontend/gulpfile.babel.js/tasks/copy.js | 33 --- .../gulpfile.babel.js/tasks/ignite-modules.js | 55 ----- .../frontend/gulpfile.babel.js/tasks/watch.js | 30 --- .../gulpfile.babel.js/webpack/common.js | 205 ------------------- .../webpack/environments/development.js | 60 ------ .../webpack/environments/production.js | 41 ---- .../webpack/environments/test.js | 44 ---- .../frontend/gulpfile.babel.js/webpack/index.js | 36 ---- .../frontend/ignite_modules/index.js | 7 +- modules/web-console/frontend/package.json | 104 ++++------ .../frontend/test/karma.conf.babel.js | 13 +- modules/web-console/frontend/test/karma.conf.js | 2 +- .../frontend/webpack/webpack.common.js | 188 +++++++++++++++++ .../frontend/webpack/webpack.dev.babel.js | 100 +++++++++ .../frontend/webpack/webpack.prod.babel.js | 64 ++++++ .../frontend/webpack/webpack.test.js | 33 +++ 26 files changed, 449 insertions(+), 781 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/.babelrc ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/.babelrc b/modules/web-console/frontend/.babelrc index a1d48c1..da16f08 100644 --- a/modules/web-console/frontend/.babelrc +++ b/modules/web-console/frontend/.babelrc @@ -1,9 +1,4 @@ { - "presets": ["angular"], - "plugins": [[ - "transform-builtin-extend", { - "globals": ["Error", "Array"], - "approximate": true - } - ]] + "presets": ["es2015", "stage-1"], + "plugins": ["add-module-exports"] } http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/.gitignore ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/.gitignore b/modules/web-console/frontend/.gitignore index 27138f6..296d61c 100644 --- a/modules/web-console/frontend/.gitignore +++ b/modules/web-console/frontend/.gitignore @@ -4,5 +4,4 @@ .npmrc build/* node_modules -ignite_modules_temp/* public/stylesheets/*.css http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/app/app.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/app.js b/modules/web-console/frontend/app/app.js index e32b1ad..df58f0e 100644 --- a/modules/web-console/frontend/app/app.js +++ b/modules/web-console/frontend/app/app.js @@ -103,11 +103,11 @@ import hasPojo from './filters/hasPojo.filter'; import uiGridSubcategories from './filters/uiGridSubcategories.filter'; // Controllers -import caches from 'controllers/caches-controller'; -import clusters from 'controllers/clusters-controller'; -import domains from 'controllers/domains-controller'; -import igfs from 'controllers/igfs-controller'; -import profile from 'controllers/profile-controller'; +import caches from '../controllers/caches-controller'; +import clusters from '../controllers/clusters-controller'; +import domains from '../controllers/domains-controller'; +import igfs from '../controllers/igfs-controller'; +import profile from '../controllers/profile-controller'; import auth from './controllers/auth.controller'; import resetPassword from './controllers/reset-password.controller'; @@ -121,7 +121,7 @@ import webConsoleFooter from './components/web-console-footer'; import igniteIcon from './components/ignite-icon'; // Inject external modules. -import 'ignite_modules_temp/index'; +import IgniteModules from 'IgniteModules/index'; import baseTemplate from 'views/base.pug'; @@ -175,12 +175,12 @@ angular 'ignite-console.loading', // Ignite configuration module. 'ignite-console.config', - // Ignite modules. - 'ignite-console.modules', // Components webConsoleHeader.name, webConsoleFooter.name, - igniteIcon.name + igniteIcon.name, + // Ignite modules. + IgniteModules.name ]) // Directives. .directive(...igniteAutoFocus) http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/app/components/web-console-header/component.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/components/web-console-header/component.js b/modules/web-console/frontend/app/components/web-console-header/component.js index 339ec46..364037f 100644 --- a/modules/web-console/frontend/app/components/web-console-header/component.js +++ b/modules/web-console/frontend/app/components/web-console-header/component.js @@ -21,7 +21,7 @@ import './style.scss'; export default { template, controller: class { - static $inject = ['$scope', '$state', 'IgniteBranding']; + static $inject = ['$rootScope', '$scope', '$state', 'IgniteBranding']; static webAgentDownloadVisibleStates = [ 'base.configuration', @@ -29,8 +29,8 @@ export default { 'base.settings' ]; - constructor($scope, $state, branding) { - Object.assign(this, {$scope, $state, branding}); + constructor($rootScope, $scope, $state, branding) { + Object.assign(this, {$rootScope, $scope, $state, branding}); } $onInit() { http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/app/modules/agent/AgentManager.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js index c511242..3344ef2 100644 --- a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js +++ b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js @@ -15,8 +15,6 @@ * limitations under the License. */ -import io from 'socket.io-client'; // eslint-disable-line no-unused-vars - import { BehaviorSubject } from 'rxjs/BehaviorSubject'; const maskNull = (val) => _.isNil(val) ? 'null' : val; http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/index.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/index.js b/modules/web-console/frontend/gulpfile.babel.js/index.js deleted file mode 100644 index 95602a1..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import gulp from 'gulp'; -import requireDir from 'require-dir'; - -// Require all tasks in gulpfile.js/tasks, including subfolders. -requireDir('./tasks', { recurse: true }); - -// Default no-arg task. -gulp.task('default', ['build']); - http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/paths.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/paths.js b/modules/web-console/frontend/gulpfile.babel.js/paths.js deleted file mode 100644 index 0007c18..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/paths.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import path from 'path'; - -const rootDir = path.resolve('./'); -const srcDir = path.resolve('app'); -const destDir = path.resolve('build'); - -const igniteModulesDir = process.env.IGNITE_MODULES ? path.join(path.normalize(process.env.IGNITE_MODULES), 'frontend') : './ignite_modules'; -const igniteModulesTemp = path.resolve('ignite_modules_temp'); - -const appModulePaths = [ - igniteModulesDir + '/index.js', - igniteModulesDir + '/**/main.js', - igniteModulesDir + '/**/module.js', - igniteModulesDir + '/**/app/modules/*.js', - igniteModulesDir + '/**/app/modules/**/*.js', - igniteModulesDir + '/**/app/modules/**/*.pug', - igniteModulesDir + '/**/*.pug', - igniteModulesDir + '/**/*.tpl.pug', - igniteModulesDir + '/**/app/**/*.js', - igniteModulesDir + '/**/app/**/*.css', - igniteModulesDir + '/**/app/**/*.scss', - igniteModulesDir + '/**/app/data/*.json' -]; - -const resourcePaths = [ - './public/**/*.svg', - './public/**/*.png', - './public/*.ico' -]; - -const resourceModulePaths = [ - igniteModulesDir + '/**/images/*.png', - igniteModulesDir + '/**/images/*.svg', - igniteModulesDir + '/*.ico' -]; - -export { - rootDir, - srcDir, - destDir, - igniteModulesDir, - igniteModulesTemp, - - resourcePaths, - resourceModulePaths, - appModulePaths -}; http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/tasks/build.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/build.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/build.js deleted file mode 100644 index 149b076..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/build.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import gulp from 'gulp'; -import sequence from 'gulp-sequence'; - -gulp.task('build', (cb) => sequence(['clean', 'clean:ignite-modules-temp'], 'ignite:modules', ['copy:resource'], 'bundle', cb)); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/tasks/bundle.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/bundle.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/bundle.js deleted file mode 100644 index d42a711..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/bundle.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import gulp from 'gulp'; -import webpack from 'webpack'; -import webpackConfig from '../webpack'; -import WebpackDevServer from 'webpack-dev-server'; - -gulp.task('bundle', (cb) => { - const devServerConfig = webpackConfig.devServer; - - delete webpackConfig.devServer; - - if (process.env.NODE_ENV === 'development') { - // Important! Call webpack and WebpackDevServer must be inline. - new WebpackDevServer(webpack(webpackConfig), devServerConfig) - .listen(devServerConfig.port, devServerConfig.host, cb); - } - else - webpack(webpackConfig, cb); -}); - http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/tasks/clean.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/clean.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/clean.js deleted file mode 100644 index c9104b2..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/clean.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import gulp from 'gulp'; -import clean from 'gulp-rimraf'; - -import { destDir, igniteModulesTemp } from '../paths'; - -// Clean build folder, remove files. -gulp.task('clean', () => - gulp.src(`${destDir}/*`, {read: false}) - .pipe(clean({ force: true })) -); - -gulp.task('clean:ignite-modules-temp', () => - gulp.src(igniteModulesTemp, {read: false}) - .pipe(clean({ force: true })) -); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/tasks/copy.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/copy.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/copy.js deleted file mode 100644 index 59373a8..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/copy.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import gulp from 'gulp'; -import sequence from 'gulp-sequence'; - -import { destDir, resourcePaths, resourceModulePaths } from '../paths'; - -gulp.task('copy:resource', (cb) => sequence('copy:resource:app', 'copy:resource:ignite_modules', cb)); - -gulp.task('copy:resource:app', () => - gulp.src(resourcePaths) - .pipe(gulp.dest(destDir)) -); - -gulp.task('copy:resource:ignite_modules', () => - gulp.src(resourceModulePaths) - .pipe(gulp.dest(`${destDir}/ignite_modules`)) -); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/tasks/ignite-modules.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/ignite-modules.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/ignite-modules.js deleted file mode 100644 index b97de7c..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/ignite-modules.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import gulp from 'gulp'; -import inject from 'gulp-inject'; -import clean from 'gulp-rimraf'; -import sequence from 'gulp-sequence'; -import {appModulePaths, igniteModulesTemp} from '../paths'; - -gulp.task('ignite:modules', (cb) => sequence('ignite:modules:copy', 'ignite:modules:inject', cb)); - -gulp.task('ignite:modules:copy', () => - gulp.src(appModulePaths) - .pipe(gulp.dest(igniteModulesTemp)) -); - -gulp.task('ignite:modules:inject', () => - gulp.src(`${igniteModulesTemp}/index.js`) - .pipe(inject(gulp.src([`${igniteModulesTemp}/**/main.js`]), { - starttag: '/* ignite:modules */', - endtag: '/* endignite */', - transform: (filePath) => { - const igniteModuleName = filePath.replace(/.*ignite_modules_temp\/([^\/]+).*/mgi, '$1'); - - // Return file contents as string. - return `import './${igniteModuleName}/main';`; - } - })) - .pipe(inject(gulp.src([`${igniteModulesTemp}/**/main.js`]), { - starttag: '/* ignite-console:modules */', - endtag: '/* endignite */', - transform: (filePath, file, i) => { - const igniteModuleName = filePath.replace(/.*ignite_modules_temp\/([^\/]+).*/mgi, '$1'); - - // Return file contents as string. - return (i ? ',' : '') + `'ignite-console.${igniteModuleName}'`; - } - })) - .pipe(clean({force: true})) - .pipe(gulp.dest(igniteModulesTemp)) -); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js deleted file mode 100644 index 9a02b88..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import gulp from 'gulp'; -import sequence from 'gulp-sequence'; - -import { resourcePaths, resourceModulePaths, appModulePaths } from '../paths'; - -gulp.task('watch:ignite-modules', (cb) => sequence('clean:ignite-modules-temp', 'ignite:modules', cb)); - -// Build + watch task. -gulp.task('watch', ['build'], () => { - gulp.watch(resourcePaths, ['copy:resource:app']); - gulp.watch(resourceModulePaths, ['copy:resource:ignite_modules']); - gulp.watch(appModulePaths, ['watch:ignite-modules']); -}); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js deleted file mode 100644 index 75b0ef4..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import path from 'path'; -import fs from 'fs'; -import webpack from 'webpack'; - -import ProgressBarPlugin from 'progress-bar-webpack-plugin'; -import eslintFormatter from 'eslint-friendly-formatter'; - -import HtmlWebpackPlugin from 'html-webpack-plugin'; - -import ExtractTextPlugin from 'extract-text-webpack-plugin'; - -import {srcDir, destDir, rootDir, igniteModulesDir} from '../paths'; - -const viewsDir = path.resolve('views'); -const imagesDir = path.resolve('public/images'); -const iconsDir = path.resolve('public/images/icons'); - -const NODE_ENV = process.env.NODE_ENV || 'production'; -const development = NODE_ENV === 'development'; -const node_modules_path = path.resolve('node_modules'); - -let favicon = 'build/ignite_modules/favicon.ico'; - -try { - fs.accessSync(path.join(igniteModulesDir, 'favicon.ico'), fs.F_OK); -} catch (ignore) { - favicon = 'build/favicon.ico'; -} - -export default { - cache: true, - node: { - fs: 'empty' - }, - // Entry points. - entry: { - polyfill: 'babel-polyfill', - vendor: path.join(srcDir, 'vendor.js'), - app: path.join(srcDir, 'app.js') - }, - - // Output system. - output: { - path: destDir, - filename: '[name].js' - }, - - // Resolves modules. - resolve: { - extensions: [ - '.js' - ], - modules: [ - srcDir, - rootDir, - node_modules_path - ], - // A list of module source folders. - alias: { - app: srcDir, - views: viewsDir, - images: imagesDir - } - }, - - // Resolve loader use postfix. - resolveLoader: { - moduleExtensions: ['-loader'] - }, - - module: { - rules: [ - { - test: /\.json$/, - loader: 'json' - }, - - // Exclude tpl.pug files to import in bundle. - { - test: /^(?:(?!tpl\.pug$).)*\.pug$/, // TODO: check this regexp for correct. - loader: `pug-html?basedir=${rootDir}` - }, - - // Render .tpl.pug files to assets folder. - { - test: /\.tpl\.pug$/, - use: [ - 'file?exports=false&name=assets/templates/[name].[hash].html', - `pug-html?exports=false&basedir=${rootDir}` - ] - }, - { - test: /\.js$/, - enforce: 'pre', - exclude: [node_modules_path], - use: [{ - loader: 'eslint', - options: { - failOnWarning: false, - failOnError: false, - formatter: eslintFormatter - } - }] - }, - { - test: /\.js$/, - exclude: [node_modules_path], - use: [{ - loader: 'babel', - options: { - cacheDirectory: true, - plugins: [ - 'transform-runtime', - 'add-module-exports' - ], - presets: ['angular'] - } - }] - }, - { - test: /\.css$/, - use: development ? ['style', 'css'] : ExtractTextPlugin.extract({ - fallback: 'style', - use: ['css'] - }) - }, - { - test: /\.scss$/, - use: development ? ['style', 'css', 'sass'] : ExtractTextPlugin.extract({ - fallback: 'style-loader', - use: ['css', 'sass'] - }) - }, - { - test: /\.(ttf|eot|svg|woff(2)?)(\?v=[\d.]+)?(\?[a-z0-9#-]+)?$/, - exclude: [iconsDir], - loader: 'file?name=assets/fonts/[name].[ext]' - }, - { - test: /.*\.svg$/, - include: [iconsDir], - use: ['svg-sprite-loader'] - }, - { - test: /\.(jpe?g|png|gif)$/i, - loader: 'file?name=assets/images/[name]_[hash].[ext]' - }, - { - test: require.resolve('jquery'), - use: [ - 'expose-loader?$', - 'expose-loader?jQuery' - ] - }, - { - test: require.resolve('nvd3'), - use: ['expose-loader?nv'] - } - ] - }, - - // Load plugins. - plugins: [ - new webpack.LoaderOptionsPlugin({ - options: { - pug: { - basedir: rootDir - }, - target: 'web' - } - }), - new webpack.ProvidePlugin({ - $: 'jquery', - jQuery: 'jquery', - _: 'lodash', - nv: 'nvd3' - }), - new webpack.DefinePlugin({NODE_ENV: JSON.stringify(NODE_ENV)}), - new webpack.optimize.CommonsChunkPlugin({name: 'vendor'}), - new webpack.optimize.AggressiveMergingPlugin({moveToParents: true}), - new HtmlWebpackPlugin({ - template: './views/index.pug', - favicon - }), - new ExtractTextPlugin({filename: 'assets/css/[name].css', allChunks: true}), - new ProgressBarPlugin() - ] -}; http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js deleted file mode 100644 index 28ecc13..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import {destDir} from '../../paths'; - -const backendPort = 3000; -const devServerPort = process.env.PORT || 9000; -const devServerHost = process.env.HOST || '0.0.0.0'; - -export default { - devtool: 'source-map', - watch: true, - devServer: { - compress: true, - historyApiFallback: true, - contentBase: destDir, - // hot: true, - inline: true, - proxy: { - '/socket.io': { - target: `http://localhost:${backendPort}`, - ws: true - }, - '/agents': { - target: `http://localhost:${backendPort}`, - ws: true - }, - '/api/v1/*': { - target: `http://localhost:${backendPort}`, - pathRewrite: { - '^/api/v1': '' - } - } - }, - watchOptions: { - aggregateTimeout: 1000, - poll: 2000 - }, - stats: { - colors: true, - chunks: false - }, - host: devServerHost, - port: devServerPort - } -}; http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/production.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/production.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/production.js deleted file mode 100644 index cbbe9ca..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/production.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - - -import webpack from 'webpack'; - -import {destDir} from '../../paths'; - -const plugins = [ - new webpack.optimize.UglifyJsPlugin({ - path: destDir, - minimize: true, - warnings: false, - sourceMap: false, - mangle: true - }) -]; - -export default { - bail: true, // Cancel build on error. - devtool: 'cheap-source-map', - output: { - publicPath: '/', - filename: '[name].[chunkhash].js' - }, - plugins -}; http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js deleted file mode 100644 index 0cb9b77..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import webpack from 'webpack'; - -const NODE_ENV = process.env.NODE_ENV || 'production'; - -export default { - cache: true, - node: { - fs: 'empty' - }, - - // Entry points. - entry: null, - - // Output system. - output: null, - - // Load plugins. - plugins: [ - new webpack.ProvidePlugin({ - $: 'jquery', - jQuery: 'jquery', - _: 'lodash', - nv: 'nvd3' - }), - new webpack.DefinePlugin({NODE_ENV: JSON.stringify(NODE_ENV)}) - ] -}; http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js deleted file mode 100644 index 3caf06c..0000000 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -import _ from 'lodash'; -import commonConfig from './common'; -import devConfig from './environments/development'; -import prodConfig from './environments/production'; - -// TODO check test config -import testConfig from './environments/test'; - -const env = process.env.NODE_ENV || 'production'; - -// Config by environments. -const configs = { - production: prodConfig, - development: devConfig, - test: testConfig -}; - -// Load config file by environment -export default _.merge(commonConfig, configs[env]); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/ignite_modules/index.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/ignite_modules/index.js b/modules/web-console/frontend/ignite_modules/index.js index c38d2d4..21ccf6a 100644 --- a/modules/web-console/frontend/ignite_modules/index.js +++ b/modules/web-console/frontend/ignite_modules/index.js @@ -17,11 +17,6 @@ import angular from 'angular'; -/* ignite:modules */ -/* endignite */ - -angular +export default angular .module('ignite-console.modules', [ - /* ignite-console:modules */ - /* endignite */ ]); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/package.json ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/package.json b/modules/web-console/frontend/package.json index 31a34f2..b20089a 100644 --- a/modules/web-console/frontend/package.json +++ b/modules/web-console/frontend/package.json @@ -4,10 +4,11 @@ "description": "Interactive Web console for configuration, executing SQL queries and monitoring of Apache Ignite Cluster", "private": true, "scripts": { - "dev": "cross-env NODE_ENV=development gulp watch", - "build": "cross-env NODE_ENV=production gulp build", - "test": "cross-env NODE_ENV=test karma start ./test/karma.conf.js", - "eslint": "eslint --format node_modules/eslint-friendly-formatter gulpfile.babel.js/ app/ controllers/ ignite_modules/ ignite_modules_temp/ -- --eff-by-issue" + "start": "webpack-dev-server --config ./webpack/webpack.dev.babel.js", + "dev": "npm start", + "build": "webpack --config ./webpack/webpack.prod.babel.js", + "test": "karma start ./test/karma.conf.js", + "eslint": "eslint --format node_modules/eslint-friendly-formatter gulpfile.babel.js/ app/ controllers/ ignite_modules/ -- --eff-by-issue" }, "author": "", "contributors": [ @@ -20,8 +21,8 @@ "keywords": "grid", "homepage": "https://ignite.apache.org/", "engines": { - "npm": "^3.x.x", - "node": "^4.x.x" + "npm": "3.x.x", + "node": "4.x.x" }, "os": [ "darwin", @@ -48,55 +49,57 @@ "angular-tree-control": "0.2.28", "angular-ui-grid": "4.0.4", "angular-ui-router": "0.4.2", + "babel-core": "6.24.1", + "babel-eslint": "7.2.3", + "babel-loader": "7.0.0", + "babel-plugin-add-module-exports": "0.2.1", + "babel-plugin-transform-runtime": "6.23.0", + "babel-polyfill": "6.23.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-runtime": "6.23.0", "bootstrap-sass": "3.3.7", "brace": "0.10.0", - "es6-promise": "4.1.0", + "copy-webpack-plugin": "4.0.1", + "css-loader": "0.28.3", + "eslint": "3.19.0", + "eslint-friendly-formatter": "3.0.0", + "eslint-loader": "1.7.1", + "expose-loader": "0.7.3", + "extract-text-webpack-plugin": "2.1.0", + "file-loader": "0.11.1", "file-saver": "1.3.3", "font-awesome": "4.7.0", - "glob": "7.1.1", + "glob": "7.1.2", + "html-loader": "0.4.5", + "html-webpack-plugin": "2.28.0", "jquery": "3.2.1", + "json-loader": "0.5.4", "jszip": "3.1.3", "lodash": "4.17.4", + "node-sass": "4.5.3", "nvd3": "1.8.4", + "progress-bar-webpack-plugin": "1.9.3", + "pug-html-loader": "1.1.0", + "pug-loader": "2.3.0", "raleway-webfont": "3.0.1", + "resolve-url-loader": "2.0.2", "roboto-font": "0.1.0", "rxjs": "5.4.0", + "sass-loader": "6.0.5", "socket.io-client": "1.7.3", - "ui-router-metatags": "1.0.3" + "style-loader": "0.18.1", + "svg-sprite-loader": "^3.0.2", + "ui-router-metatags": "1.0.3", + "webpack": "2.6.1", + "webpack-dev-server": "2.4.5", + "webpack-merge": "4.1.0", + "worker-loader": "0.8.0" }, "devDependencies": { - "assets-webpack-plugin": "3.5.1", - "autoprefixer": "6.7.7", - "babel-core": "6.24.1", - "babel-eslint": "7.2.1", - "babel-loader": "6.4.1", - "babel-plugin-add-module-exports": "0.2.1", - "babel-plugin-transform-builtin-extend": "1.1.2", - "babel-plugin-transform-runtime": "6.23.0", - "babel-polyfill": "6.23.0", - "babel-preset-angular": "6.0.15", - "babel-preset-es2015": "6.24.1", - "babel-runtime": "6.23.0", "chai": "3.5.0", - "cross-env": "4.0.0", - "css-loader": "0.28.0", - "eslint": "3.19.0", - "eslint-friendly-formatter": "2.0.7", - "eslint-loader": "1.7.1", - "expose-loader": "0.7.3", - "extract-text-webpack-plugin": "2.1.0", - "file-loader": "0.11.1", - "gulp": "3.9.1", - "gulp-eslint": "3.0.1", - "gulp-inject": "4.2.0", - "gulp-rimraf": "0.2.1", - "gulp-sequence": "0.4.6", - "gulp-util": "3.0.8", - "html-loader": "0.4.5", - "html-webpack-plugin": "2.28.0", - "jasmine-core": "2.5.2", - "json-loader": "0.5.4", - "karma": "1.6.0", + "jasmine-core": "2.6.2", + "karma": "1.7.0", "karma-babel-preprocessor": "6.0.1", "karma-jasmine": "1.1.0", "karma-mocha": "1.3.0", @@ -104,25 +107,8 @@ "karma-phantomjs-launcher": "1.0.4", "karma-teamcity-reporter": "1.0.0", "karma-webpack": "2.0.3", - "mocha": "3.2.0", + "mocha": "3.4.2", "mocha-teamcity-reporter": "1.1.1", - "ngtemplate-loader": "1.3.1", - "node-sass": "4.5.2", - "phantomjs-prebuilt": "2.1.14", - "postcss-loader": "1.3.3", - "progress-bar-webpack-plugin": "1.9.3", - "pug-html-loader": "1.1.0", - "pug-loader": "2.3.0", - "require-dir": "0.3.1", - "resolve-url-loader": "2.0.2", - "sass-loader": "6.0.3", - "style-loader": "0.16.1", - "svg-sprite-loader": "2.1.0", - "url": "0.11.0", - "url-loader": "0.5.8", - "webpack": "2.3.3", - "webpack-dev-server": "2.4.2", - "webpack-stream": "3.2.0", - "worker-loader": "0.8.0" + "phantomjs-prebuilt": "2.1.14" } } http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/test/karma.conf.babel.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/karma.conf.babel.js b/modules/web-console/frontend/test/karma.conf.babel.js index aa6b11c..1651c30 100644 --- a/modules/web-console/frontend/test/karma.conf.babel.js +++ b/modules/web-console/frontend/test/karma.conf.babel.js @@ -15,21 +15,14 @@ * limitations under the License. */ -import webpack from '../gulpfile.babel.js/webpack'; import path from 'path'; -const basePath = path.resolve('./'); - -// Webpack chunk plugin has to be removed during test runs due to incompatibility issues, -// otherwise tests would not run at all. -// https://github.com/webpack-contrib/karma-webpack/issues/24#issuecomment-257613167 -const chunkPluginIndex = webpack.plugins.findIndex((plugin) => plugin.chunkNames); -webpack.plugins.splice(chunkPluginIndex, 1); +import testCfg from '../webpack/webpack.test'; export default (config) => { config.set({ // Base path that will be used to resolve all patterns (eg. files, exclude). - basePath, + basePath: path.resolve('./'), // Frameworks to use available frameworks: https://npmjs.org/browse/keyword/karma-adapter frameworks: ['mocha'], @@ -53,7 +46,7 @@ export default (config) => { 'test/**/*.js': ['webpack'] }, - webpack, + webpack: testCfg, webpackMiddleware: { noInfo: true http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/test/karma.conf.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/karma.conf.js b/modules/web-console/frontend/test/karma.conf.js index a8b1b11..e354482 100644 --- a/modules/web-console/frontend/test/karma.conf.js +++ b/modules/web-console/frontend/test/karma.conf.js @@ -16,4 +16,4 @@ */ require('babel-core/register'); -module.exports = require('./karma.conf.babel.js').default; +module.exports = require('./karma.conf.babel.js'); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/webpack/webpack.common.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/webpack/webpack.common.js b/modules/web-console/frontend/webpack/webpack.common.js new file mode 100644 index 0000000..ca7f672 --- /dev/null +++ b/modules/web-console/frontend/webpack/webpack.common.js @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +import path from 'path'; +import webpack from 'webpack'; + +import transformRuntime from 'babel-plugin-transform-runtime'; +import presetEs2015 from 'babel-preset-es2015'; +import presetStage1 from 'babel-preset-stage-1'; + +import CopyWebpackPlugin from 'copy-webpack-plugin'; +import ExtractTextPlugin from 'extract-text-webpack-plugin'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; +import ProgressBarPlugin from 'progress-bar-webpack-plugin'; + +const basedir = path.resolve('./'); +const contentBase = path.resolve('public'); +const node_modules = path.resolve('node_modules'); + +const app = path.resolve('app'); +const IgniteModules = process.env.IGNITE_MODULES ? path.join(process.env.IGNITE_MODULES, 'frontend') : path.resolve('ignite_modules'); + +export default { + cache: true, + node: { + fs: 'empty' + }, + // Entry points. + entry: { + polyfill: 'babel-polyfill', + vendor: path.join(app, 'vendor.js'), + app: path.join(app, 'app.js') + }, + + // Output system. + output: { + path: path.resolve('build'), + filename: '[name].[chunkhash].js', + publicPath: '/', + sourceMapFilename: '[name].[chunkhash].map' + }, + + // Resolves modules. + resolve: { + modules: [node_modules], + // A list of module source folders. + alias: { + app, + images: path.resolve('public/images'), + views: path.resolve('views'), + IgniteModules + } + }, + + // Resolve loader use postfix. + resolveLoader: { + modules: [ + node_modules + ], + moduleExtensions: ['-loader'] + }, + + module: { + rules: [ + { + test: /\.json$/, + loader: 'json' + }, + // Exclude tpl.pug files to import in bundle. + { + test: /^(?:(?!tpl\.pug$).)*\.pug$/, // TODO: check this regexp for correct. + loader: `pug-html?basedir=${basedir}` + }, + + // Render .tpl.pug files to assets folder. + { + test: /\.tpl\.pug$/, + use: [ + 'file?exports=false&name=assets/templates/[name].[hash].html', + `pug-html?exports=false&basedir=${basedir}` + ] + }, + { + test: /\.js$/, + enforce: 'pre', + exclude: [node_modules], + use: [{ + loader: 'eslint', + options: { + failOnWarning: false, + failOnError: false, + formatter: 'eslint-friendly-formatter' + } + }] + }, + { + test: /\.js$/, + exclude: [node_modules], + use: [{ + loader: 'babel-loader', + options: { + cacheDirectory: true, + plugins: [ + transformRuntime + ], + presets: [ + presetEs2015, + presetStage1 + ] + } + }] + }, + { + test: /\.(ttf|eot|svg|woff(2)?)(\?v=[\d.]+)?(\?[a-z0-9#-]+)?$/, + exclude: [contentBase], + loader: 'file?name=assets/fonts/[name].[ext]' + }, + { + test: /.*\.svg$/, + include: [contentBase], + use: ['svg-sprite-loader'] + }, + { + test: /\.(jpe?g|png|gif)$/i, + loader: 'file?name=assets/images/[name]_[hash].[ext]' + }, + { + test: require.resolve('jquery'), + use: [ + 'expose-loader?$', + 'expose-loader?jQuery' + ] + }, + { + test: require.resolve('nvd3'), + use: ['expose-loader?nv'] + } + ] + }, + + // Load plugins. + plugins: [ + new webpack.LoaderOptionsPlugin({ + options: { + pug: { + basedir + }, + target: 'web' + } + }), + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery', + _: 'lodash', + nv: 'nvd3', + io: 'socket.io-client' + }), + new webpack.optimize.AggressiveMergingPlugin({moveToParents: true}), + new HtmlWebpackPlugin({ + template: './views/index.pug' + }), + new ExtractTextPlugin({filename: 'assets/css/[name].css', allChunks: true}), + new CopyWebpackPlugin([ + { context: 'public', from: '**/*.png' }, + { context: 'public', from: '**/*.svg' }, + { context: 'public', from: '**/*.ico' }, + // Ignite modules. + { context: IgniteModules, from: '**/*.png', force: true }, + { context: IgniteModules, from: '**/*.svg', force: true }, + { context: IgniteModules, from: '**/*.ico', force: true } + ]), + new ProgressBarPlugin() + ] +}; http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/webpack/webpack.dev.babel.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/webpack/webpack.dev.babel.js b/modules/web-console/frontend/webpack/webpack.dev.babel.js new file mode 100644 index 0000000..dc5cd41 --- /dev/null +++ b/modules/web-console/frontend/webpack/webpack.dev.babel.js @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +import webpack from 'webpack'; +import merge from 'webpack-merge'; + +import path from 'path'; + +import commonCfg from './webpack.common'; + +import ExtractTextPlugin from 'extract-text-webpack-plugin'; + +const backendPort = process.env.BACKEND_PORT || 3000; +const devServerPort = process.env.PORT || 9000; +const devServerHost = process.env.HOST || '0.0.0.0'; + +export default merge(commonCfg, { + devtool: 'source-map', + watch: true, + module: { + rules: [ + { + test: /\.css$/, + use: ['style', 'css'] + }, + { + test: /\.scss$/, + // Version without extract plugin fails on some machines. https://github.com/sass/node-sass/issues/1895 + use: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: [ + { + loader: 'css', + options: { + sourceMap: true + } + }, + { + loader: 'sass', + options: { + sourceMap: true + } + } + ] + }) + } + ] + }, + devServer: { + compress: true, + historyApiFallback: true, + disableHostCheck: true, + contentBase: path.resolve('build'), + // hot: true, + inline: true, + proxy: { + '/socket.io': { + target: `http://localhost:${backendPort}`, + ws: true + }, + '/agents': { + target: `http://localhost:${backendPort}`, + ws: true + }, + '/api/v1/*': { + target: `http://localhost:${backendPort}`, + pathRewrite: { + '^/api/v1': '' + } + } + }, + watchOptions: { + aggregateTimeout: 1000, + poll: 2000 + }, + stats: { + colors: true, + chunks: false + }, + host: devServerHost, + port: devServerPort + }, + plugins: [ + new webpack.optimize.CommonsChunkPlugin({name: 'vendor'}) + ] +}); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/webpack/webpack.prod.babel.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/webpack/webpack.prod.babel.js b/modules/web-console/frontend/webpack/webpack.prod.babel.js new file mode 100644 index 0000000..f18a3ba --- /dev/null +++ b/modules/web-console/frontend/webpack/webpack.prod.babel.js @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +import webpack from 'webpack'; +import merge from 'webpack-merge'; + +import ExtractTextPlugin from 'extract-text-webpack-plugin'; + +import commonCfg from './webpack.common'; + +export default merge(commonCfg, { + bail: true, // Cancel build on error. + devtool: 'cheap-source-map', + module: { + rules: [ + { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: 'style', + use: ['css'] + }) + }, + { + test: /\.scss$/, + use: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: ['css', 'sass'] + }) + } + ] + }, + plugins: [ + new webpack.optimize.CommonsChunkPlugin({name: 'vendor'}), + new webpack.LoaderOptionsPlugin({ + minimize: true, + debug: false + }), + new webpack.optimize.UglifyJsPlugin({ + beautify: false, + mangle: { + screw_ie8: true, + keep_fnames: true + }, + compress: { + screw_ie8: true + }, + comments: false + }) + ] +}); http://git-wip-us.apache.org/repos/asf/ignite/blob/88fd1a63/modules/web-console/frontend/webpack/webpack.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/webpack/webpack.test.js b/modules/web-console/frontend/webpack/webpack.test.js new file mode 100644 index 0000000..36d2650 --- /dev/null +++ b/modules/web-console/frontend/webpack/webpack.test.js @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +import merge from 'webpack-merge'; + +import commonCfg from './webpack.common'; + +export default merge(commonCfg, { + cache: true, + node: { + fs: 'empty' + }, + + // Entry points. + entry: null, + + // Output system. + output: null +});