mirror of
https://github.com/lensapp/lens.git
synced 2024-09-20 13:57:23 +03:00
2d0609ed24
* 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>
183 lines
5.5 KiB
TypeScript
Executable File
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),
|
|
};
|
|
}
|