В итоге я использовал webpack, чтобы упаковать весь электрон в один файл, и теперь он работаетДаже внутри подкаталога.
Основной файл для package.json:
"main": "./dist-electron/main.js",
Это мои electron.webpack.js
:
const path = require('path');
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
const nodeExternals = require('webpack-node-externals');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const JavaScriptObfuscator = require('webpack-obfuscator');
module.exports = {
target: 'electron-main',
mode: 'development', // production
entry: {
renderer: 'electron-app/main.ts',
},
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist-electron')
},
node: {
__dirname: true
},
optimization: {
minimizer: [new UglifyJsPlugin({
parallel: true,
uglifyOptions: {
mangle: {
toplevel: true,
},
toplevel: true,
ie8: false,
},
})],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: [
{
loader: 'ts-loader',
options: {
configFile: "tsconfig-serve.json"
}
}
],
exclude: [
/node_modules/,
],
}
]
},
plugins: [
// new JavaScriptObfuscator ({
// rotateUnicodeArray: true
// }, [])
],
resolve: {
modules: [
"node_modules",
path.resolve(__dirname, "node_modules")
],
plugins: [new TsconfigPathsPlugin({ configFile: "tsconfig-serve.json" })],
extensions: ['.tsx', '.ts', '.js'],
},
externals: [nodeExternals()]
};
и tsconfig-serve.json
:
{
"compilerOptions": {
"sourceMap": true,
"outDir": "./dist-electron",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2015",
"pretty": true,
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"allowJs": true,
"types": [
"node"
],
"baseUrl": "./",
"paths": {
--SNIP--
},
"lib": [
"es2017",
"es2016",
"es2015",
"dom"
]
},
"files": [
"electron-app/main.ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}