npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@phylum/webpack-electron

v1.0.0-beta.2

Published

Launch electron processes for electron bundled sources

Downloads

4

Readme

Webpack Electron Task

Build Status Coverage Status Latest License

This package exposes a task that runs an electron instance for webpack bundled code and supports hot module replacement in the main and render process.

Installation

npm i webpack @phylum/webpack electron @phylum/webpack-electron

Usage

The webpack electron task runs an electron main process from bundled sources. Note, that the webpack tasks will not be started automatically by the webpack electron task.

import { Task } from '@phylum/pipeline';
import { WebpackTask } from '@phylum/webpack';
import { WebpackElectronTask } from '@phylum/webpack-electron';

const bundleMain = new WebpackTask(...);

const electron = new WebpackElectronTask(Task.value({
	main: bundleMain
}));

new Task(async t => {
	// Run the webpack compiler:
	await t.use(bundleMain);
	// Start an electron process:
	await t.use(electron);
});

Note that the electron task assumes, that the main bundle has already been compiled.

Hot Module Replacement

Main Bundle

new WebpackElectronTask(Task.value({
	// Enable hot module replacement:
	mainHmr: true,
	main: bundleMain
}));
// Import the hmr client somewhere in your main process code...
import '@phylum/webpack-electron/dist/hmr';
// ...or add it to your entry point:
entry: ['@phylum/webpack-electron/dist/hmr', './src/main.js'],

// Optional. Include the hmr runtime:
plugins: [
	new webpack.HotModuleReplacementPlugin()
]

If the hmr runtime is not included or an update is rejected, the main process will be rebooted.

Renderer Bundles

For renderer hmr support, it is required that the hmr client is also included in the main bundle as it routes update signals to one or more renderer processes.

new WebpackElectronTask(Task.value({
	...

	// Enable renderer hmr:
	rendererHmr: true

	// single renderer bundle:
	renderer: bundleRenderer,

	// multiple renderer bundles:
	renderer: {
		foo: bundleRendererFoo,
		bar: bundleRendererBar
	}
}));
// Import the hmr client somewhere in your code...
import '@phylum/webpack-electron/dist/hmr';

// and specify the name when using multiple renderer bundles:
import '@phylum/webpack-electron/dist/hmr?name=foo';
// ...or add it to your entry point:
entry: ['@phylum/webpack-electron/dist/hmr?...', './src/renderer.js'],

// Optional. Include the hmr runtime:
plugins: [
	new webpack.HotModuleReplacementPlugin()
]

When a renderer process rejects an update or the hmr runtime is not included, the renderer page will be reloaded by default. This behaviour can be changed to rebooting the main process instead by using the onreject query parameter:

import '@phylum/webpack-electron/dist/hmr?onreject=reboot';

Sample

The code in the /sample directory shows how a basic project could look like.

  • Webpack is used for bundling main and renderer process code.
  • Both code bases are watched for changes.
# Clone the repository:
git clone https://github.com/phylumjs/webpack-electron.git

# Install dependencies
npm install

# Compile webpack-electron:
# (This is needed because the sample uses this package directly)
npm run compile

# Run the sample in dev mode:
npx phylum ./sample -d

# Build the sample for production:
npx phylum ./sample

Troubleshooting

The main process can not be started

  • The electron uses a file named index.js from your main bundles's output directory by default.
  • Make sure, that the webpack option output.filename does not contain placeholders like '[name]' or 'hash'.
  • Startup can be customized using entry, cwd and args options.

Hot module replacement always reboots the main process or reloads the renderer page

  • Make sure the HotModuleReplacementPlugin is included in your webpack config.
  • Make sure that the hmr client is not a webpack external.