Skip to content

Commit

Permalink
Using esbuild instead of rollup (#1298)
Browse files Browse the repository at this point in the history
  • Loading branch information
WebReflection committed Mar 22, 2023
1 parent 371b5ea commit 51d5140
Show file tree
Hide file tree
Showing 7 changed files with 3,381 additions and 2,363 deletions.
3 changes: 3 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Features

- Added a `docked` field and attribute for the `<py-terminal>` custom element, enabled by default when the terminal is in `auto` mode, and able to dock the terminal at the bottom of the page with auto scroll on new code execution.


Bug fixes
---------

Expand All @@ -17,6 +18,8 @@ Enhancements
------------

- Py-REPL tests now run on both osx and non osx OSs
- migrated from *rollup* to *esbuild* to create artifacts
- updated `@codemirror` dependency to its latest

2023.01.1
=========
Expand Down
3 changes: 3 additions & 0 deletions pyscriptjs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ dev:
build:
npm run build

build-fast:
node esbuild.js

examples:
mkdir -p ./examples
cp -r ../examples/* ./examples
Expand Down
84 changes: 84 additions & 0 deletions pyscriptjs/esbuild.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
const { build } = require('esbuild');
const { spawn } = require('child_process');
const { join } = require('path');
const { watchFile } = require('fs');
const { cp, lstat, readdir } = require('fs/promises');

const production = !process.env.NODE_WATCH || process.env.NODE_ENV === 'production';

const copy_targets = [
{ src: 'public/index.html', dest: 'build' },
{ src: 'src/plugins/python/*', dest: 'build/plugins/python' },
];

if (!production) {
copy_targets.push({ src: 'build/*', dest: 'examples/build' });
}

const pyScriptConfig = {
entryPoints: ['src/main.ts'],
loader: { '.py': 'text' },
bundle: true,
format: 'iife',
globalName: 'pyscript',
};

const copyPath = (source, dest, ...rest) => cp(join(__dirname, source), join(__dirname, dest), ...rest);

const esbuild = async () => {
const timer = `\x1b[1mpyscript\x1b[0m \x1b[2m(${production ? 'prod' : 'dev'})\x1b[0m built in`;
console.time(timer);

await Promise.all([
build({
...pyScriptConfig,
sourcemap: false,
minify: false,
outfile: 'build/pyscript.js',
}),
build({
...pyScriptConfig,
sourcemap: true,
minify: true,
outfile: 'build/pyscript.min.js',
}),
]);

const copy = [];
for (const { src, dest } of copy_targets) {
if (src.endsWith('/*')) {
copy.push(copyPath(src.slice(0, -2), dest, { recursive: true }));
} else {
copy.push(copyPath(src, dest + src.slice(src.lastIndexOf('/'))));
}
}
await Promise.all(copy);

console.timeEnd(timer);
};

esbuild().then(() => {
if (!production) {
(async function watchPath(path) {
for (const file of await readdir(path)) {
const whole = join(path, file);
if (/\.(js|ts|css|py)$/.test(file)) {
watchFile(whole, async () => {
await esbuild();
});
} else if ((await lstat(whole)).isDirectory()) {
watchPath(whole);
}
}
})('src');

const server = spawn('python', ['-m', 'http.server', '--directory', './examples', '8080'], {
stdio: 'inherit',
detached: false,
});

process.on('exit', () => {
server.kill();
});
}
});

0 comments on commit 51d5140

Please sign in to comment.