From: Stas Vilchik Date: Tue, 5 Apr 2016 12:16:55 +0000 (+0200) Subject: create web development server X-Git-Tag: 5.5-RC1~33 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9cc12455020fbb47e606c3e7152a291cf3294299;p=sonarqube.git create web development server --- diff --git a/server/sonar-web/.babelrc b/server/sonar-web/.babelrc index 8c43a477c18..0ecf1664f9c 100644 --- a/server/sonar-web/.babelrc +++ b/server/sonar-web/.babelrc @@ -1,6 +1,17 @@ { "presets": ["es2015", "stage-0", "react"], - "ignore": [ - "**/libs/**" - ] + "ignore": [ + "**/libs/**" + ], + "env": { + "hot": { + "plugins": [["react-transform", { + "transforms": [{ + "transform": "react-transform-hmr", + "imports": ["react"], + "locals": ["module"] + }] + }]] + } + } } diff --git a/server/sonar-web/devServer.js b/server/sonar-web/devServer.js new file mode 100644 index 00000000000..837e83ef104 --- /dev/null +++ b/server/sonar-web/devServer.js @@ -0,0 +1,56 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + /* eslint no-var: 0 */ + /* eslint no-console: 0 */ + /* eslint object-shorthand: 0 */ + /* jscs:disable requireEnhancedObjectLiterals */ +var url = require('url'); +var express = require('express'); +var proxy = require('express-http-proxy'); +var webpack = require('webpack'); +var config = require('./webpack.config.dev'); + +var app = express(); +var compiler = webpack(config); + +var PORT = process.env.PORT || 8080; +var API_HOST = process.env.API_HOST || 'http://localhost:9000'; + +app.use(require('webpack-dev-middleware')(compiler, { + noInfo: true, + publicPath: config.output.publicPath +})); + +app.use(require('webpack-hot-middleware')(compiler)); + +app.all('*', proxy(API_HOST, { + forwardPath: function (req) { + return url.parse(req.url).path; + } +})); + +app.listen(PORT, 'localhost', function (err) { + if (err) { + console.log(err); + return; + } + + console.log('Listening at http://localhost:' + PORT); +}); diff --git a/server/sonar-web/package.json b/server/sonar-web/package.json index bedbac551af..7393b7bc96a 100644 --- a/server/sonar-web/package.json +++ b/server/sonar-web/package.json @@ -10,6 +10,7 @@ "babel-core": "6.3.17", "babel-eslint": "5.0.0", "babel-loader": "6.2.0", + "babel-plugin-react-transform": "2.0.2", "babel-polyfill": "6.3.14", "babel-preset-es2015": "6.3.13", "babel-preset-react": "6.3.13", @@ -30,6 +31,8 @@ "eslint-plugin-react": "4.0.0", "event-stream": "3.3.1", "expose-loader": "0.7.1", + "express": "4.13.4", + "express-http-proxy": "0.6.0", "glob": "5.0.15", "gulp": "3.9.0", "gulp-autoprefixer": "3.1.0", @@ -60,6 +63,7 @@ "react-router": "2.0.0", "react-router-redux": "4.0.0", "react-select": "1.0.0-beta6", + "react-transform-hmr": "1.0.4", "redux": "3.3.1", "redux-logger": "2.2.1", "redux-simple-router": "1.0.1", @@ -72,6 +76,8 @@ "vinyl-buffer": "1.0.0", "vinyl-source-stream": "1.1.0", "webpack": "1.12.9", + "webpack-dev-middleware": "1.6.1", + "webpack-hot-middleware": "2.10.0", "whatwg-fetch": "0.10.0", "yargs": "3.27.0" }, @@ -80,7 +86,8 @@ "build": "gulp build", "test": "mocha --opts tests/mocha.opts tests", "coverage": "babel-node node_modules/.bin/isparta cover --root 'src/main/js' --include-all-sources --excludes '**/libs/**' --dir 'target/coverage' node_modules/.bin/_mocha -- --opts tests/mocha.opts tests", - "lint": "eslint src/main/js && jscs src/main/js" + "lint": "eslint src/main/js && jscs src/main/js", + "dev": "NODE_ENV=hot node devServer" }, "engines": { "node": ">=4" diff --git a/server/sonar-web/webpack.config.dev.js b/server/sonar-web/webpack.config.dev.js new file mode 100644 index 00000000000..f0fc980c360 --- /dev/null +++ b/server/sonar-web/webpack.config.dev.js @@ -0,0 +1,32 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +/* eslint no-var: 0 */ +var webpack = require('webpack'); + +var config = require('./webpack.config'); + +config.devtool = 'cheap-module-eval-source-map'; +config.output.publicPath = '/js/bundles/'; +config.entry.vendor.unshift('webpack-hot-middleware/client'); +config.plugins = [].concat(config.plugins, [ + new webpack.HotModuleReplacementPlugin() +]); + +module.exports = config; diff --git a/server/sonar-web/webpack.config.js b/server/sonar-web/webpack.config.js index a441f2b2728..4589431a6b1 100644 --- a/server/sonar-web/webpack.config.js +++ b/server/sonar-web/webpack.config.js @@ -1,3 +1,6 @@ +/* eslint no-var: 0 */ +/* eslint object-shorthand: 0 */ +/* jscs:disable requireEnhancedObjectLiterals */ var path = require('path'); var webpack = require('webpack'); var autoprefixer = require('autoprefixer');