@build-script/heft-esbuild-plugin
v0.0.8
Published
lowlevel esbuild plugin for [heft]
Downloads
85
Maintainers
Readme
heft-esbuild-plugin
- run esbuild from heft
- support rig packages
TODO
Watch mode is not implemented yet. currentlly taskDependencies
is required to trigger build, otherwise it won't build at all in watch mode. normal build is ok.
Usage
- add task in heft.json:
"esbuild": { // "taskDependencies": ["typescript"], // you may need this "taskPlugin": { "pluginPackage": "@build-script/heft-esbuild-plugin", "options": { "any": "thing" } } },
- create config file
config/esbuild.{ts,mts,cts,mjs,cjs,json}
(no.js
!) - write export options. example:
/// <reference types='@build-script/heft-esbuild-plugin' /> import type { BuildOptions, Plugin } from 'esbuild'; export const options: BuildOptions[] = [ { entryPoints: [{ in: './src/renderer.ts', out: 'renderer' }], platform: 'browser', outdir: './lib', external: ['electron'], plugins: [nodeSassPlugin()], }, { entryPoints: [{ in: './src/window/preload.ts', out: 'preload' }], platform: 'node', outdir: './lib', define: { 'process.env.NODE_ENV': 'production' }, external: ['electron'], }, ];
session api
config script will have a globalThis.session
object, which has type: IGlobalSession
This object will delete after script load, you must save a copy if you want to use it.
This is correct:
const session = globalThis.session; // save local copy for use
createEsbuildPlugin(session);
function after() {
console.log(session.rootDir);
}
This is wrong:
function after() {
console.log(session.rootDir); // Oops! session is gone
}
Write file hook
see: IOutputModifier
const session = globalThis.session; // save local copy for use
export function onEmit(files, options, lastReturn) {
files[0].text = '/** xxx */' + files[0].text;
files.push({ path: '/absolute/path.js', text: 'xxxxx' });
}
Note
Dependencies
You must install esbuild
your-self.
If you use .ts
as config file, typescript
and ts-node
is also required.
Depenency packages can be installed in rig package.
Settings
There are some default settings: see this file
Your config file override each options, not extend them. (except loader
is extend)
Required options:
- outdir
- entryPoints
Deleted options: (throw if set)
- outfile
- absWorkingDir
Ignored options:
- write: handle by library
- metafile: force to true
ts-node
ts-node
is registered if (and only if) config file is .ts
. It will not unregister anymore.
If type
field in package.json
is module
, you must create a config/package.json
with content {"type":"commonjs"}
.
You can create a config/tsconfig.json
for ts-node.