feat: add js minification during file copy in build process
This commit is contained in:
parent
0b59c6b0d6
commit
ee9eeb30ea
@ -32,6 +32,7 @@ To update the version across the entire project, simply change the version numbe
|
||||
- Run the build script:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run buildext
|
||||
```
|
||||
|
||||
|
57
buildext.js
57
buildext.js
@ -1,6 +1,7 @@
|
||||
import { execSync } from "child_process";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { minify } from "terser";
|
||||
import url from "url";
|
||||
import syncVersion from "./syncVersion.js";
|
||||
|
||||
@ -25,6 +26,56 @@ const copyDir = async (src, dest) => {
|
||||
});
|
||||
};
|
||||
|
||||
const minifyJS = async (jsContent) => {
|
||||
try {
|
||||
const result = await minify(jsContent, {
|
||||
compress: {
|
||||
drop_console: false, // Keep console logs for debugging
|
||||
drop_debugger: true,
|
||||
pure_funcs: ["console.debug"],
|
||||
},
|
||||
mangle: {
|
||||
reserved: ["chrome"], // Don't mangle chrome API
|
||||
},
|
||||
});
|
||||
return result.code;
|
||||
} catch (error) {
|
||||
console.warn("⚠️ Minification failed, using original:", error.message);
|
||||
return jsContent;
|
||||
}
|
||||
};
|
||||
|
||||
// Copy and minify JavaScript files from src directory
|
||||
const copyAndMinifySrcFiles = async (src, dest) => {
|
||||
await fs.promises.mkdir(dest, { recursive: true });
|
||||
|
||||
const entries = await fs.promises.readdir(src, { withFileTypes: true });
|
||||
|
||||
for (const entry of entries) {
|
||||
const srcPath = path.join(src, entry.name);
|
||||
const destPath = path.join(dest, entry.name);
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
await copyAndMinifySrcFiles(srcPath, destPath);
|
||||
} else if (entry.name.endsWith(".js")) {
|
||||
// Minify JavaScript files
|
||||
console.log(`🗜️ Minifying ${entry.name}...`);
|
||||
const content = await fs.promises.readFile(srcPath, "utf8");
|
||||
const originalSize = Buffer.byteLength(content, "utf8");
|
||||
const minified = await minifyJS(content, entry.name);
|
||||
const minifiedSize = Buffer.byteLength(minified, "utf8");
|
||||
const savings = (((originalSize - minifiedSize) / originalSize) * 100).toFixed(1);
|
||||
console.log(
|
||||
` 📊 ${entry.name}: ${originalSize} → ${minifiedSize} bytes (${savings}% smaller)`
|
||||
);
|
||||
await fs.promises.writeFile(destPath, minified, "utf8");
|
||||
} else {
|
||||
// Copy other files as-is
|
||||
await fs.promises.copyFile(srcPath, destPath);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const main = async () => {
|
||||
await syncVersion();
|
||||
|
||||
@ -47,9 +98,9 @@ const main = async () => {
|
||||
}
|
||||
await fs.promises.mkdir(releaseDir);
|
||||
|
||||
// 4. Copy src files (manifest, background, etc) to release
|
||||
console.log("📦 Copying src files to extension-release...");
|
||||
await copyDir(srcDir, releaseDir);
|
||||
// 4. Copy and minify src files
|
||||
console.log("📦 Copying and minifying src files...");
|
||||
await copyAndMinifySrcFiles(srcDir, releaseDir);
|
||||
|
||||
// 5. Copy frontend dist files to release (merged at root)
|
||||
console.log("📦 Copying frontend dist files to extension-release...");
|
||||
|
136
package-lock.json
generated
Normal file
136
package-lock.json
generated
Normal file
@ -0,0 +1,136 @@
|
||||
{
|
||||
"name": "cdrm-extension",
|
||||
"version": "2.1.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "cdrm-extension",
|
||||
"version": "2.1.0",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"terser": "^5.43.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=21.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.12",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
|
||||
"integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/source-map": {
|
||||
"version": "0.3.10",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz",
|
||||
"integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
|
||||
"integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.29",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
|
||||
"integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.1.0",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.15.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-from": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/commander": {
|
||||
"version": "2.20.3",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true,
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map-support": {
|
||||
"version": "0.5.21",
|
||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
|
||||
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"buffer-from": "^1.0.0",
|
||||
"source-map": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/terser": {
|
||||
"version": "5.43.1",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz",
|
||||
"integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.3",
|
||||
"acorn": "^8.14.0",
|
||||
"commander": "^2.20.0",
|
||||
"source-map-support": "~0.5.20"
|
||||
},
|
||||
"bin": {
|
||||
"terser": "bin/terser"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -17,5 +17,8 @@
|
||||
"type": "module",
|
||||
"engines": {
|
||||
"node": ">=21.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"terser": "^5.43.1"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user