1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

attempt to use webpack-dev-server via node-api -- part 1

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2022-02-04 12:21:25 +02:00
parent 98b516f290
commit 92a5c785a3
6 changed files with 871 additions and 31 deletions

View File

@ -318,6 +318,7 @@
"@types/url-parse": "^1.4.5",
"@types/uuid": "^8.3.3",
"@types/webpack": "^5.28.0",
"@types/webpack-dev-server": "^4.7.2",
"@types/webpack-env": "^1.16.3",
"@types/webpack-node-externals": "^2.5.3",
"@typescript-eslint/eslint-plugin": "^5.10.1",
@ -383,6 +384,7 @@
"typescript-plugin-css-modules": "^3.4.0",
"webpack": "^5.67.0",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "^4.7.4",
"webpack-node-externals": "^3.0.0",
"xterm": "^4.15.0",
"xterm-addon-fit": "^0.5.0"

View File

@ -10,7 +10,7 @@ import * as Mobx from "mobx";
import * as LensExtensionsCommonApi from "../extensions/common-api";
import * as LensExtensionsMainApi from "../extensions/main-api";
import { app, autoUpdater, dialog, powerMonitor } from "electron";
import { appName, isIntegrationTesting, isMac, isWindows, productName } from "../common/vars";
import { appName, isIntegrationTesting, isMac, isWindows, productName, isDevelopment } from "../common/vars";
import { LensProxy } from "./lens-proxy";
import { WindowManager } from "./window-manager";
import { ClusterManager } from "./cluster-manager";
@ -55,6 +55,7 @@ import routerInjectable from "./router/router.injectable";
import shellApiRequestInjectable from "./proxy-functions/shell-api-request/shell-api-request.injectable";
import userStoreInjectable from "../common/user-store/user-store.injectable";
import trayMenuItemsInjectable from "./tray/tray-menu-items.injectable";
import { createDevServer } from "../../webpack.dev-server";
const di = getDi();
@ -177,6 +178,10 @@ di.runSetups().then(() => {
try {
logger.info("🔌 Starting LensProxy");
await lensProxy.listen();
if (isDevelopment) {
await createDevServer(lensProxy.port).start();
}
} catch (error) {
dialog.showErrorBox("Lens Error", `Could not start proxy: ${error?.message || "unknown error"}`);

View File

@ -124,6 +124,21 @@ export class Router {
}
try {
// const filename = path.basename(req.url);
// redirect requests to [appName].js, [appName].html /sockjs-node/ to webpack-dev-server (for hot-reload support)
// const toWebpackDevServer = filename.includes(appName) || filename.includes("hot-update") || req.url.includes("sockjs-node");
//
// if (isDevelopment /*&& toWebpackDevServer*/) {
// const redirectLocation = `http://localhost:${webpackDevServerPort}${req.url}`;
//
// logger.info(`[ROUTER]: redirecting to dev-server url: ${redirectLocation}`);
//
// response.statusCode = 307;
// response.setHeader("Location", redirectLocation);
//
// return response.end();
// }
const data = await readFile(asset);
response.setHeader("Content-Type", getMimeType(asset));

39
webpack.dev-server.ts Executable file
View File

@ -0,0 +1,39 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import Webpack from "webpack";
import WebpackDevServer from "webpack-dev-server";
import { webpackLensRenderer } from "./webpack.renderer";
import { buildDir } from "./src/common/vars";
export function createDevServer(lensProxyPort: number): WebpackDevServer {
const config = webpackLensRenderer();
const compiler = Webpack(config);
return new WebpackDevServer({
headers: {
"Access-Control-Allow-Origin": "*",
},
allowedHosts: "all",
host: "localhost",
// static: buildDir, // aka `devServer.contentBase` in webpack@4
hot: true, // enable HMR when supported by modules
proxy: {
// https://webpack.js.org/configuration/dev-server/#devserverproxy
"*": `//:localhost:${lensProxyPort}`,
secure: false, // allow http connections
changeOrigin: true,
context: [buildDir],
bypass: function (req, res, proxyOptions) {
console.log(`[PROXY]: path ${req.path}`);
return null; // continue with proxy, return false for "404"-error
},
},
client: {
// don't show warnings and errors on top of rendered app view
overlay: false,
},
}, compiler);
}

View File

@ -26,7 +26,6 @@ export function webpackLensRenderer(): webpack.Configuration {
} = vars;
return {
context: __dirname,
target: "electron-renderer",
name: "lens-app",
mode: isDevelopment ? "development" : "production",
@ -116,7 +115,7 @@ export function iconsAndImagesWebpackRules(): webpack.RuleSetRule[] {
},
{
test: /\.(jpg|png|ico)$/,
type: "asset/resource", // path to file, e.g. "/static/assets/*"
type: "asset/resource", // path to file, e.g. "/static/build/assets/*"
},
];
}

836
yarn.lock

File diff suppressed because it is too large Load Diff