mirror of
https://github.com/john-okeefe/foliate-js.git
synced 2026-09-09 11:29:14 -04:00
Set up build system to automatically download and copy ML/CV libraries during npm run build, eliminating manual file management. Changes to package.json: - Add devDependencies: * @techstark/opencv-js: OpenCV.js for edge detection * @tensorflow-models/coco-ssd: ML model for panel detection * @rollup/plugin-terser: Minification plugin (already used) Changes to rollup.config.js: - Add custom downloadTensorFlow plugin: * Downloads TensorFlow UMD build from unpkg.com during build * Saves to vendor/tfjs/tf.min.js (1.5MB) * Only runs during build, not in watch mode - Add copy plugins for ML/CV libraries: * Copy OpenCV.js from node_modules to vendor/opencv/opencv.js * Copy COCO-SSD from node_modules to vendor/coco-ssd/coco-ssd.min.js This automated approach ensures: 1. All vendored libraries are updated when npm install is run 2. No manual file downloads or copy operations needed 3. Reproducible builds across different environments 4. Version tracking via package.json Build workflow: npm install → npm run build → all ML/CV libraries ready
99 lines
2.4 KiB
JavaScript
99 lines
2.4 KiB
JavaScript
import { nodeResolve } from "@rollup/plugin-node-resolve";
|
|
import terser from "@rollup/plugin-terser";
|
|
import { copy } from "fs-extra";
|
|
import https from "https";
|
|
|
|
const downloadTensorFlow = () => ({
|
|
name: "download-tensorflow",
|
|
async writeBundle() {
|
|
const url = "https://unpkg.com/@tensorflow/tfjs@4.22.0/dist/tf.min.js";
|
|
const dest = "vendor/tfjs/tf.min.js";
|
|
|
|
console.log(`Downloading ${url}...`);
|
|
|
|
const response = await fetch(url);
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to download: ${response.statusText}`);
|
|
}
|
|
|
|
const buffer = await response.arrayBuffer();
|
|
|
|
// Create directory
|
|
const fs = await import("fs");
|
|
const path = await import("path");
|
|
const dir = path.dirname(dest);
|
|
|
|
await fs.promises.mkdir(dir, { recursive: true });
|
|
|
|
await fs.promises.writeFile(dest, new Uint8Array(buffer));
|
|
console.log(`Downloaded ${buffer.byteLength} bytes to ${dest}`);
|
|
},
|
|
});
|
|
|
|
const copyPDFJS = () => ({
|
|
name: "copy-pdfjs",
|
|
async writeBundle() {
|
|
await copy("node_modules/pdfjs-dist/build/pdf.mjs", "vendor/pdfjs/pdf.mjs");
|
|
await copy(
|
|
"node_modules/pdfjs-dist/build/pdf.mjs.map",
|
|
"vendor/pdfjs/pdf.mjs.map",
|
|
);
|
|
await copy(
|
|
"node_modules/pdfjs-dist/build/pdf.worker.mjs",
|
|
"vendor/pdfjs/pdf.worker.mjs",
|
|
);
|
|
await copy(
|
|
"node_modules/pdfjs-dist/build/pdf.worker.mjs.map",
|
|
"vendor/pdfjs/pdf.worker.mjs.map",
|
|
);
|
|
await copy("node_modules/pdfjs-dist/cmaps", "vendor/pdfjs/cmaps");
|
|
await copy(
|
|
"node_modules/pdfjs-dist/standard_fonts",
|
|
"vendor/pdfjs/standard_fonts",
|
|
);
|
|
},
|
|
});
|
|
const copyOpenCV = () => ({
|
|
name: "copy-opencv",
|
|
async writeBundle() {
|
|
await copy(
|
|
"node_modules/@techstark/opencv-js/dist/opencv.js",
|
|
"vendor/opencv/opencv.js",
|
|
);
|
|
},
|
|
});
|
|
const copyCocoSsd = () => ({
|
|
name: "copy-coco-ssd",
|
|
async writeBundle() {
|
|
await copy(
|
|
"node_modules/@tensorflow-models/coco-ssd/dist/coco-ssd.min.js",
|
|
"vendor/coco-ssd/coco-ssd.min.js",
|
|
);
|
|
},
|
|
});
|
|
export default [
|
|
{
|
|
input: "rollup/fflate.js",
|
|
output: {
|
|
dir: "vendor/",
|
|
format: "esm",
|
|
},
|
|
plugins: [nodeResolve(), terser()],
|
|
},
|
|
{
|
|
input: "rollup/zip.js",
|
|
output: {
|
|
dir: "vendor/",
|
|
format: "esm",
|
|
},
|
|
plugins: [
|
|
nodeResolve(),
|
|
terser(),
|
|
copyPDFJS(),
|
|
copyOpenCV(),
|
|
downloadTensorFlow(),
|
|
copyCocoSsd(),
|
|
],
|
|
},
|
|
];
|