1
0
mirror of https://github.com/lensapp/lens.git synced 2024-09-20 13:57:23 +03:00
lens/webpack.renderer.ts
Roman f1b03990ea
Extensions loading (#795)
Signed-off-by: Roman <ixrock@gmail.com>

Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com>
Co-authored-by: Lauri Nevala <lauri.nevala@gmail.com>
2020-09-09 13:00:25 +03:00

185 lines
5.1 KiB
TypeScript
Executable File

import { appName, buildDir, extensionsDir, extensionsLibName, htmlTemplate, isDevelopment, isProduction, publicPath, rendererDir, sassCommonVars } 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 TerserPlugin from "terser-webpack-plugin";
import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin"
export default [
webpackLensRenderer,
webpackExtensionsApi,
]
// todo: use common chunks/externals for "react", "react-dom", etc.
export function webpackExtensionsApi(): webpack.Configuration {
const config = webpackLensRenderer({ showVars: false });
config.name = "extensions-api"
config.entry = {
[extensionsLibName]: path.resolve(extensionsDir, "extension-api.ts")
};
config.output.libraryTarget = "commonjs2"
delete config.devtool;
return config;
}
export function webpackLensRenderer({ showVars = true } = {}): webpack.Configuration {
if (showVars) {
console.info('WEBPACK:renderer', require("./src/common/vars"));
}
return {
context: __dirname,
target: "electron-renderer",
devtool: "source-map", // todo: optimize in dev-mode with webpack.SourceMapDevToolPlugin
name: "lens-app",
mode: isProduction ? "production" : "development",
cache: isDevelopment,
entry: {
[appName]: path.resolve(rendererDir, "bootstrap.tsx"),
},
output: {
publicPath: publicPath,
path: buildDir,
filename: '[name].js',
chunkFilename: 'chunks/[name].js',
},
stats: {
warningsFilter: [
/Critical dependency: the request of a dependency is an expression/
]
},
resolve: {
extensions: [
'.js', '.jsx', '.json',
'.ts', '.tsx',
]
},
optimization: {
minimize: isProduction,
minimizer: [
new TerserPlugin({
cache: true,
parallel: true,
sourceMap: true,
extractComments: {
condition: "some",
banner: [
`Lens - The Kubernetes IDE. Copyright ${new Date().getFullYear()} by Mirantis, Inc. All rights reserved.`
].join("\n")
}
})
],
},
module: {
rules: [
{
test: /\.node$/,
use: "node-loader"
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: [
{
loader: "babel-loader",
options: {
presets: [
["@babel/preset-env", {
modules: "commonjs" // ling-ui
}],
]
}
},
{
loader: "ts-loader",
options: {
transpileOnly: true,
compilerOptions: {
// localization support
// https://lingui.js.org/guides/typescript.html
jsx: "preserve",
target: "es2016",
module: "esnext",
},
}
}
]
},
{
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 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",
}),
],
}
}