mirror of
https://github.com/lensapp/lens.git
synced 2024-09-20 13:57:23 +03:00
f1b03990ea
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>
185 lines
5.1 KiB
TypeScript
Executable File
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",
|
|
}),
|
|
],
|
|
}
|
|
} |