I may miss something in webpack.config.js, (a full working example would be appreciated :) ).
const dev = process.env.NODE_ENV === "dev";
const path = require('path');
const Webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const exec = require('child_process').exec;
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ElectronNativePlugin = require("electron-native-plugin");
// Html-webpack-plugin configuration
const indexConfig = {
template: './src/main.ts',
excludeChunks: ['electron'],
baseHref: dev ? '/' : './',
chunksSortMode: (chunk1, chunk2) => {
// Set the order of files injected (dependencies before app)
// https://github.com/jantimon/html-webpack-plugin/issues/481
let orders = ['corejs', 'zonejs', 'app'];
return orders.indexOf(chunk1.names[0]) - orders.indexOf(chunk2.names[0]);
}
};
// Clean-webpack-plugin configuration
const pathsToClean = [
'./dist/css',
'./dist/assets',
'./dist/templates'
];
let webpackConfig = {
mode: 'none',
// How source maps are generated : style of source mapping
devtool: dev ? 'eval-cheap-module-source-map' : false,
// Development server configuration
devServer: {
historyApiFallback: true,
// Execute custom middleware after all other middleware internally within the server
after() {
// Fix whitescreen bug on build with Electron BrowserWindow
exec('electron . --dev');
}
},
// Where webpack looks to start building the bundle
entry: {
'electron': './main', // Electron entry point
'corejs': 'core-js/client/shim', // Angular dependency
'zonejs': 'zone.js/dist/zone', // Angular dependency
'app': './src/main.ts' // App entry point
},
// How the different types of modules within a project will be treated
module: {
rules: [
{
// All files with a '.ts' extension will be handled by ts-loader
test: /\.ts$/,
use: [
//'ts-loader',
"electron-native-patch-loader",
{
loader: "electron-native-loader",
options: {
files: ["/src/**/*.ts"],
outputPath: path.resolve('./dist') // Set here your defined path
// for the output bundles, e.g. "./dist"
}
}
],
exclude: /node_modules/
},
{
// All files with a '.scss' extension will be handled by sass-loader
test: /\.s?css$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[hash:10].css'
}
},
'extract-loader',
{
loader: 'css-loader',
options: {
minimize: !dev
}
},
{
loader: 'postcss-loader',
options: {
sourceMap: dev
}
},
'resolve-url-loader',
'sass-loader'
],
},
{
// All files with a '.html' extension will be handled by html-loader and save into external file
test: /\.html$/,
exclude: /node_modules/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[hash:10].html',
}
},
'extract-loader',
'html-loader'
]
},
{
// All images and fonts will be optimized and their paths will be solved
enforce: 'pre',
test: /\.(png|jpe?g|gif|svg|woff2?|eot|ttf|otf|wav)(\?.*)?$/,
use: [{
loader: 'url-loader',
options: {
name: '[name].[hash:10].[ext]',
limit: 8192
}
}, {
loader: 'img-loader'
}],
},
// {
// test: /\.js$/,
// use:
// [
// "electron-native-patch-loader",
// {
// loader: "electron-native-loader",
// options: {
// files: ["/src/**/*.ts"],
// outputPath: path.resolve('./dist') // Set here your defined path
// // for the output bundles, e.g. "./dist"
// }
// }
// ]
// },
{
test: /\.node$/,
use: "electron-native-loader"
},
// Ignore warnings about System.import in Angular
{
test: /[\/\\]@angular[\/\\].+\.js$/,
parser: {
system: true
}
}
]
},
// Configure how modules are resolved
resolve: {
extensions: [".ts", ".js"]
},
// How and where webpack should output bundles, assets and anything else
output: {
path: path.resolve('./dist'),
filename: '[name].js'
},
// What bundle information gets displayed
stats: {
warnings: false
},
// Target a specific environment (cf. doc)
target: 'electron-main',
// Configure whether to polyfill or mock certain Node.js globals and modules
node: {
__dirname: true,
fs: 'empty',
'font-awesome': 'empty'
},
// Customize the webpack build process with additionals plugins
plugins: [
new HtmlWebpackPlugin(indexConfig),
new Webpack.ContextReplacementPlugin(/angular([\\\/])core([\\\/])/, path.resolve(__dirname, './src')),
new CopyWebpackPlugin(['./package.json']),
new ElectronNativePlugin({
forceRebuild: false,
outputPath: "./electron/native-modules/", // a default relative output path for all native modules
userModules:
[
// "./cc/bb/aa", // path to the binding.gyp file
// {
// source: "./native-module/", // path to the binding.gyp file
// debugBuild: false, // we are overriding the default debugBuild settings
// outputPath: "./greeting-module/" // this is a relative path to the path of output bundles,
// // we override the default
// }
],
debugBuild: true // yes, do debug builds
}),
new Webpack.IgnorePlugin(/node-gyp/),
new Webpack.IgnorePlugin(/electron-native-patch-loader/)
],
};
// UglifyJs and clean output folder only for prod
if (!dev) {
webpackConfig.plugins.push(new CleanWebpackPlugin(pathsToClean));
webpackConfig.plugins.push(new UglifyJsPlugin());
}
// Export the config
module.exports = webpackConfig;
Complete error message is :
Environment: Ubuntu 16.04
Node 8.9.1
yarn 1.7.0
webpack 4.14.0
I may miss something in webpack.config.js, (a full working example would be appreciated :) ).