diff --git a/package.json b/package.json index 1119253aa5..fa31b8850c 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "test": "lerna run --scope '@scm-manager/ui-*' test", "e2e-tests": "lerna run --scope '@scm-manager/e2e-tests' ci", "typecheck": "lerna run --scope '@scm-manager/ui-*' typecheck", - "serve": "NODE_ENV=development webpack-dev-server --hot --mode=development --config=scm-ui/ui-scripts/src/webpack.config.js", + "serve": "NODE_ENV=development ui-scripts serve", "deploy": "ui-scripts publish", "set-version": "ui-scripts version" }, diff --git a/scm-ui/ui-scripts/src/commands/serve.js b/scm-ui/ui-scripts/src/commands/serve.js new file mode 100644 index 0000000000..467a05b77a --- /dev/null +++ b/scm-ui/ui-scripts/src/commands/serve.js @@ -0,0 +1,52 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +const Webpack = require("webpack"); +const WebpackDevServer = require("webpack-dev-server"); +const webpackConfig = require("../webpack.config"); + +module.exports = () => { + const compiler = Webpack(webpackConfig); + const devServerConfig = webpackConfig[0].devServer; + const server = new WebpackDevServer(compiler, devServerConfig); + + server.listen(devServerConfig.port, "127.0.0.1", () => { + console.log(`Starting server on http://localhost:${devServerConfig.port}`); + }); + + // if we could access the parent id of our current process + // we start watching it, because a changing parent id means + // that the parent process has died. + // On linux our process does not receive any signal if our parent dies, + // e.g.: ctrl+c in gradle + if (process.ppid) { + const { ppid } = process; + setInterval(() => { + if (ppid !== process.ppid) { + server.close(); + process.exit(); + } + }, 500); + } +}; diff --git a/scm-ui/ui-scripts/src/webpack.config.js b/scm-ui/ui-scripts/src/webpack.config.js index 291ed87d07..3585ee2cf7 100644 --- a/scm-ui/ui-scripts/src/webpack.config.js +++ b/scm-ui/ui-scripts/src/webpack.config.js @@ -124,6 +124,7 @@ module.exports = [ historyApiFallback: true, overlay: true, port: 3000, + hot: true, before: app => { app.use(createContextPathMiddleware("/scm")); }, @@ -160,6 +161,7 @@ module.exports = [ plugins: webpackPlugins }, { + mode, context: root, entry: "./ui-styles/src/scm.scss", module: { @@ -195,6 +197,7 @@ module.exports = [ } }, { + mode, context: path.resolve(root), entry: { polyfills: "./ui-polyfill/src/index.js"