bitwardenjavascripttypescriptangularelectronclidesktopnodejswebextensionfirefoxbrowser-extensionchromesafari
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.3 KiB
182 lines
4.3 KiB
const path = require("path"); |
|
const webpack = require("webpack"); |
|
const { merge } = require("webpack-merge"); |
|
const HtmlWebpackPlugin = require("html-webpack-plugin"); |
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); |
|
const { AngularWebpackPlugin } = require("@ngtools/webpack"); |
|
const TerserPlugin = require("terser-webpack-plugin"); |
|
const configurator = require("./config/config"); |
|
|
|
const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV; |
|
|
|
console.log("Renderer process config"); |
|
const envConfig = configurator.load(NODE_ENV); |
|
configurator.log(envConfig); |
|
|
|
const ENV = process.env.ENV == null ? "development" : process.env.ENV; |
|
|
|
const common = { |
|
module: { |
|
rules: [ |
|
{ |
|
test: /\.[cm]?js$/, |
|
use: [ |
|
{ |
|
loader: "babel-loader", |
|
options: { |
|
configFile: false, |
|
plugins: ["@angular/compiler-cli/linker/babel"], |
|
}, |
|
}, |
|
], |
|
}, |
|
{ |
|
test: /\.[jt]sx?$/, |
|
loader: "@ngtools/webpack", |
|
}, |
|
{ |
|
test: /\.(jpe?g|png|gif|svg)$/i, |
|
exclude: /.*(bwi-font)\.svg/, |
|
generator: { |
|
filename: "images/[name][ext]", |
|
}, |
|
type: "asset/resource", |
|
}, |
|
{ |
|
test: /\.wasm$/, |
|
loader: "base64-loader", |
|
type: "javascript/auto", |
|
}, |
|
], |
|
}, |
|
plugins: [], |
|
resolve: { |
|
extensions: [".tsx", ".ts", ".js"], |
|
symlinks: false, |
|
modules: [path.resolve("../../node_modules")], |
|
}, |
|
output: { |
|
filename: "[name].js", |
|
path: path.resolve(__dirname, "build"), |
|
}, |
|
}; |
|
|
|
const renderer = { |
|
mode: NODE_ENV, |
|
devtool: "source-map", |
|
// TODO: Replace this with web. |
|
// target: "web", |
|
target: "electron-renderer", |
|
node: { |
|
__dirname: false, |
|
}, |
|
entry: { |
|
"app/main": "./src/app/main.ts", |
|
}, |
|
optimization: { |
|
minimizer: [ |
|
new TerserPlugin({ |
|
terserOptions: { |
|
// Replicate Angular CLI behaviour |
|
compress: { |
|
global_defs: { |
|
ngDevMode: false, |
|
ngI18nClosureMode: false, |
|
}, |
|
}, |
|
}, |
|
}), |
|
], |
|
splitChunks: { |
|
cacheGroups: { |
|
commons: { |
|
test: /[\\/]node_modules[\\/]/, |
|
name: "app/vendor", |
|
chunks: (chunk) => { |
|
return chunk.name === "app/main"; |
|
}, |
|
}, |
|
}, |
|
}, |
|
}, |
|
module: { |
|
rules: [ |
|
{ |
|
test: /\.(html)$/, |
|
loader: "html-loader", |
|
}, |
|
{ |
|
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/, |
|
exclude: /loading.svg/, |
|
generator: { |
|
filename: "fonts/[name][ext]", |
|
}, |
|
type: "asset/resource", |
|
}, |
|
{ |
|
test: /\.css$/, |
|
use: [ |
|
{ |
|
loader: MiniCssExtractPlugin.loader, |
|
}, |
|
"css-loader", |
|
"postcss-loader", |
|
], |
|
}, |
|
{ |
|
test: /\.scss$/, |
|
use: [ |
|
{ |
|
loader: MiniCssExtractPlugin.loader, |
|
options: { |
|
publicPath: "../", |
|
}, |
|
}, |
|
"css-loader", |
|
"sass-loader", |
|
], |
|
}, |
|
// Hide System.import warnings. ref: https://github.com/angular/angular/issues/21560 |
|
{ |
|
test: /[\/\\]@angular[\/\\].+\.js$/, |
|
parser: { system: true }, |
|
}, |
|
{ |
|
test: /\.wasm$/, |
|
loader: "base64-loader", |
|
type: "javascript/auto", |
|
}, |
|
], |
|
}, |
|
plugins: [ |
|
new AngularWebpackPlugin({ |
|
tsConfigPath: "tsconfig.renderer.json", |
|
entryModule: "src/app/app.module#AppModule", |
|
sourceMap: true, |
|
}), |
|
// ref: https://github.com/angular/angular/issues/20357 |
|
new webpack.ContextReplacementPlugin( |
|
/\@angular(\\|\/)core(\\|\/)fesm5/, |
|
path.resolve(__dirname, "./src") |
|
), |
|
new HtmlWebpackPlugin({ |
|
template: "./src/index.html", |
|
filename: "index.html", |
|
chunks: ["app/vendor", "app/main"], |
|
}), |
|
new webpack.SourceMapDevToolPlugin({ |
|
include: ["app/main.js"], |
|
}), |
|
new MiniCssExtractPlugin({ |
|
filename: "[name].[contenthash].css", |
|
chunkFilename: "[id].[contenthash].css", |
|
}), |
|
new webpack.EnvironmentPlugin({ |
|
ENV: ENV, |
|
FLAGS: envConfig.flags, |
|
DEV_FLAGS: NODE_ENV === "development" ? envConfig.devFlags : {}, |
|
}), |
|
], |
|
}; |
|
|
|
module.exports = merge(common, renderer);
|
|
|