]> source.dussan.org Git - sonarqube.git/commitdiff
create web development server
authorStas Vilchik <vilchiks@gmail.com>
Tue, 5 Apr 2016 12:16:55 +0000 (14:16 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Tue, 5 Apr 2016 15:23:44 +0000 (17:23 +0200)
server/sonar-web/.babelrc
server/sonar-web/devServer.js [new file with mode: 0644]
server/sonar-web/package.json
server/sonar-web/webpack.config.dev.js [new file with mode: 0644]
server/sonar-web/webpack.config.js

index 8c43a477c182e72caad20a46da48fef84c517f7a..0ecf1664f9c1324f9c7edd962b5e6360af93073c 100644 (file)
@@ -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 (file)
index 0000000..837e83e
--- /dev/null
@@ -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);
+});
index bedbac551af44a78ebc2d89da5747febb1e9828f..7393b7bc96a97b9e7e78385a8d83e67665f280de 100644 (file)
@@ -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 (file)
index 0000000..f0fc980
--- /dev/null
@@ -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;
index a441f2b27286221d8d1e44fc4b2ee49fd9805abb..4589431a6b18194fbce120b4a5fe93e1ce1a25ea 100644 (file)
@@ -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');