so I'm developing an Electron application using Angular, but I'm facing some problems importing a new dependency (electron-regedit) to my main.js (where I put the Electron app, BrowserWindow, ipcMain, etc). When I try to package the application and try to open I receive the following message:
I searched a lot but anything that I tried works, I use electron-packager and webpack to package my application. One thing that I noticed is that the problem occurs with any dependency that I try to import in the main.js file, I tried it with the dependency "electron-log". Another things I tried to do was change the dependency from "dependencies" to "devDependencies" in package.json, reset node_modules and installed it again, but I wasn't successful.
I will share my webpack file, I believe my problem is in here or in electron-packager itself. This is my webpack file:
const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin;
const path = require('path');
const webpack = require('webpack');
const projectRoot = __dirname || process.cwd();
const isDevelopment = process.env.NODE_ENV === 'development';
const nodeModules = path.join(projectRoot, 'node_modules');
const sourceFolder = path.join(projectRoot, 'src');
const outputFolder = path.join(projectRoot, 'dist');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const rxPaths = require('rxjs/_esm5/path-mapping');
module.exports = {
target: isDevelopment ? 'web' : 'electron-renderer',
//devtool: isDevelopment ? 'source-map' : 'source-map',
entry: {
main: [path.join(sourceFolder, 'main.ts')],
},
module: {
rules: [
{
// include fonts inline in css
test: /\.(eot|ttf|otf|woff|woff2|svg)$/,
type: 'asset/inline',
include: nodeModules,
},
{
test: /\.(svg|cur|jpg|png|ani|gif|webp)$/,
type: 'asset/resource',
exclude: nodeModules,
generator: {
filename: 'static/images/[name].[contenthash:20][ext][query]',
},
},
{
test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/,
loader: '@ngtools/webpack',
},
{
test: /\.html$/i,
loader: 'html-loader',
},
{
test: /\.s[ac]ss$/i,
use: [
{
loader: MiniCssExtractPlugin.loader,
},
{
// Translates CSS into CommonJS
loader: 'css-loader',
options: {
sourceMap: true,
//importLoaders: 1,
//modules: true
//url:false
},
},
/*
{
loader: 'postcss-loader',
options: {
sourceMap: true,
},
},
*/
{
// rewrites relative paths in url() statements based on the original source file, used for awesome font urls rewrite
loader: 'resolve-url-loader',
options: {
sourceMap: true,
//debug: true,
},
},
{
// Compiles Sass to CSS
loader: 'sass-loader',
options: {
sourceMap: true,
sassOptions: {
//includePaths: ['node_modules']
},
},
},
],
},
],
},
output: {
clean: true, // Clean the output directory before emit.
path: outputFolder,
filename: 'static/js/[name].[contenthash:20].bundle.js',
sourceMapFilename: 'static/js/[name].[contenthash:20].source.map',
chunkFilename: 'static/js/[id].[contenthash:20].chunk.js',
pathinfo: true,
},
plugins: [
new MiniCssExtractPlugin({
filename: isDevelopment ? '[name].css' : '[name].[hash].css',
}),
new HtmlWebpackPlugin({
template: path.join(sourceFolder, 'index.html'),
filename: 'index.html',
hash: false,
inject: true,
favicon: false,
minify: isDevelopment ? false : true,
cache: true,
showErrors: true,
title: 'project',
}),
new AngularCompilerPlugin({
tsConfigPath: 'src/tsconfig.app.json',
mainPath: 'main.ts',
sourceMap: true,
hostReplacementPaths: {
'environments/environment.ts': isDevelopment
? 'environments/environment.ts'
: 'environments/environment.prod.ts',
},
}),
new CopyWebpackPlugin({
patterns: [
{
context: 'src',
to: '',
from: 'assets/**/*',
globOptions: {
dot: true,
gitignore: true,
ignore: ['.gitkeep', '**/.DS_Store', '**/Thumbs.db'],
},
},
],
}),
],
node: {
global: true,
__filename: true,
__dirname: true,
},
resolve: {
extensions: ['.ts', '.js', '.scss', '.css', '.html'],
symlinks: true,
modules: [sourceFolder, nodeModules],
fallback: {
fs: false,
tls: false,
net: false,
os: false,
zlib: false,
child_process: false,
http: require.resolve('stream-http'),
https: require.resolve('https-browserify'),
process: require.resolve('process/browser'),
crypto: require.resolve('crypto-browserify'),
stream: require.resolve('stream-browserify'),
assert: require.resolve('assert/'),
path: require.resolve('path-browserify'),
util: require.resolve('util/'),
buffer: require.resolve('buffer/'),
},
},
};
And here is the npm spripts that I use to bundle the application (I use bundle:windows)
"copy": "copyfiles main.js package.json menu/* resources/* dist",
"build:prod": "cross-env NODE_ENV=production webpack --config webpack.prod.js",
"package:windows": "node package --platform=win32 --arch=ia32",
"bundle:windows": "npm-run-all -s build:prod copy package:windows",
I hope someone can help me. Thanks.
