Skip to content

Feature: Hook to PostProcess package.json files emitted by wasm-pack #150

@fbartho

Description

@fbartho

It'd be great if you could configure a hook into the plugin so that once the package.json is generated, that you could inject or otherwise adjust details about the exposed package.json without needing to use an external post-processing script.

I made a workaround as a webpack plugin -- but that's only marginally better than an external script. -- This could be used as an example on how to integrate it into wasm-pack-plugin, but consumers of wasm-pack-plugin shouldn't have to deal with that.
/** Lets you mess with an asset that might have been emitted by an external build tool */
class PatchPostBuildPlugin {
	private paths: string[];
	private handler: (filePath: string, contents: string) => string;

	constructor({
		paths,
		handler,
	}: {
		paths: string[];
		handler: (filePath: string, contents: string) => string;
	}) {
		this.paths = paths;
		this.handler = handler;
	}
	apply(compiler: webpack.Compiler) {
		const pluginName = PatchPostBuildPlugin.name;

		compiler.hooks.thisCompilation.tap(pluginName, (compilation) => {
			compilation.hooks.processAssets.tapPromise(
				{
					name: pluginName,
					stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS,
				},
				async (_assets) => {
					const work = this.paths.map(async (assetPath) => {
						const assetContents = await fs.promises.readFile(assetPath, "utf-8");
						const updatedContents = this.handler(assetPath, assetContents);
						compilation.emitAsset(assetPath, new webpack.sources.RawSource(updatedContents));
					});
					await Promise.all(work);
				},
			);
		});
	}
}

Semi-related feature request that got side-tracked with a CLI request that had a different solution: drager/wasm-pack#427

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions