1
0
mirror of https://github.com/lensapp/lens.git synced 2024-09-20 13:57:23 +03:00
lens/webpack.renderer.ts
Jari Kolehmainen 2d0609ed24
Check source files for license header (#2763)
* check source files for license header

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* tweak

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* add license header to all relevant source files

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
2021-05-12 18:33:26 +03:00

183 lines
5.5 KiB
TypeScript
Executable File

/**
* Copyright (c) 2021 OpenLens Authors
*
* 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.
*/
import { appName, buildDir, htmlTemplate, isDevelopment, isProduction, publicPath, rendererDir, sassCommonVars, webpackDevServerPort } from "./src/common/vars";
import path from "path";
import webpack from "webpack";
import HtmlWebpackPlugin from "html-webpack-plugin";
import MiniCssExtractPlugin from "mini-css-extract-plugin";
import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin";
import ProgressBarPlugin from "progress-bar-webpack-plugin";
import ReactRefreshWebpackPlugin from "@pmmmwh/react-refresh-webpack-plugin";
import * as vars from "./src/common/vars";
export default [
webpackLensRenderer
];
export function webpackLensRenderer({ showVars = true } = {}): webpack.Configuration {
if (showVars) {
console.info("WEBPACK:renderer", vars);
}
return {
context: __dirname,
target: "electron-renderer",
devtool: "source-map", // todo: optimize in dev-mode with webpack.SourceMapDevToolPlugin
devServer: {
contentBase: buildDir,
port: webpackDevServerPort,
host: "localhost",
hot: true,
// to avoid cors errors when requests is from iframes
disableHostCheck: true,
headers: { "Access-Control-Allow-Origin": "*" },
},
name: "lens-app",
mode: isProduction ? "production" : "development",
cache: isDevelopment,
entry: {
[appName]: path.resolve(rendererDir, "bootstrap.tsx"),
},
output: {
libraryTarget: "global",
library: "",
globalObject: "this",
publicPath,
path: buildDir,
filename: "[name].js",
chunkFilename: "chunks/[name].js",
},
stats: {
warningsFilter: [
/Critical dependency: the request of a dependency is an expression/,
/export '.*' was not found in/
]
},
resolve: {
extensions: [
".js", ".jsx", ".json",
".ts", ".tsx",
]
},
optimization: {
minimize: false
},
module: {
rules: [
{
test: /\.node$/,
use: "node-loader"
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: {
loader: "ts-loader",
options: {
transpileOnly: true, // ForkTsCheckerPlugin does type-checking
}
}
},
{
test: /\.(jpg|png|svg|map|ico)$/,
use: {
loader: "file-loader",
options: {
name: "images/[name]-[hash:6].[ext]",
esModule: false, // handle media imports in <template>, e.g <img src="../assets/logo.svg"> (vue/react?)
}
}
},
{
test: /\.(ttf|eot|woff2?)$/,
use: {
loader: "url-loader",
options: {
name: "fonts/[name].[ext]"
}
}
},
{
test: /\.s?css$/,
use: [
// https://webpack.js.org/plugins/mini-css-extract-plugin/
isDevelopment ? "style-loader" : MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
sourceMap: isDevelopment
},
},
{
loader: "sass-loader",
options: {
sourceMap: isDevelopment,
prependData: `@import "${path.basename(sassCommonVars)}";`,
sassOptions: {
includePaths: [
path.dirname(sassCommonVars)
]
},
}
},
]
}
]
},
plugins: [
new ProgressBarPlugin(),
new ForkTsCheckerPlugin(),
// todo: fix remain warnings about circular dependencies
// new CircularDependencyPlugin({
// cwd: __dirname,
// exclude: /node_modules/,
// allowAsyncCycles: true,
// failOnError: false,
// }),
// todo: check if this actually works in mode=production files
// new webpack.DllReferencePlugin({
// context: process.cwd(),
// manifest: manifestPath,
// sourceType: libraryTarget,
// }),
new HtmlWebpackPlugin({
filename: `${appName}.html`,
template: htmlTemplate,
inject: true,
}),
new MiniCssExtractPlugin({
filename: "[name].css",
}),
isDevelopment && new webpack.HotModuleReplacementPlugin(),
isDevelopment && new ReactRefreshWebpackPlugin(),
].filter(Boolean),
};
}