From 86e32f9a7506203fbda0e25a307309f67cb010de Mon Sep 17 00:00:00 2001 From: Ze-Zheng Wu Date: Wed, 29 Jan 2025 19:01:02 +0800 Subject: [PATCH] feat: miniprogram --- package.json | 4 +- scripts/babel-plugin-miniprogram-patch.ts | 14 +++++++ scripts/build-miniprogram.ts | 47 +++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 scripts/babel-plugin-miniprogram-patch.ts create mode 100644 scripts/build-miniprogram.ts diff --git a/package.json b/package.json index 945c3c02..6c7d2eee 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ ], "main": "./dist/cjs/full/index.js", "module": "./dist/es/full/index.js", + "miniprogram": "./dist/miniprogram", "exports": { ".": { "import": "./dist/es/full/index.js", @@ -171,7 +172,8 @@ "build:es": "vite build", "build:cjs": "tsx ./scripts/build-cjs.ts", "build:iife": "tsx ./scripts/build-iife.ts", - "build": "conc \"pnpm:build:es\" \"pnpm:build:cjs\" \"pnpm:build:iife\"", + "build:miniprogram": "tsx ./scripts/build-miniprogram.ts", + "build": "conc \"pnpm:build:es\" \"pnpm:build:cjs\" \"pnpm:build:iife\" \"pnpm:build:miniprogram\"", "postbuild:es": "tsc -p ./tsconfig.pkg.json --declarationDir ./dist/es", "postbuild:cjs": "tsc -p ./tsconfig.pkg.json --declarationDir ./dist/cjs", "postbuild": "conc \"pnpm:copy:wasm\" \"pnpm:docs:build\"", diff --git a/scripts/babel-plugin-miniprogram-patch.ts b/scripts/babel-plugin-miniprogram-patch.ts new file mode 100644 index 00000000..592c278b --- /dev/null +++ b/scripts/babel-plugin-miniprogram-patch.ts @@ -0,0 +1,14 @@ +import type { PluginItem } from "@babel/core"; + +export function miniprogramPatch(): PluginItem { + return { + visitor: { + Identifier(path) { + if (path.node.name !== "WebAssembly") { + return; + } + path.node.name = "WXWebAssembly"; + }, + }, + }; +} diff --git a/scripts/build-miniprogram.ts b/scripts/build-miniprogram.ts new file mode 100644 index 00000000..8a2d4d89 --- /dev/null +++ b/scripts/build-miniprogram.ts @@ -0,0 +1,47 @@ +import { writeFile } from "node:fs/promises"; +import { type LibraryOptions, build } from "vite"; +import babel from "vite-plugin-babel"; +import viteConfig from "../vite.config.js"; +import { miniprogramPatch } from "./babel-plugin-miniprogram-patch"; + +async function buildCjs() { + await build({ + ...viteConfig, + build: { + ...viteConfig.build, + target: ["es2018"], + lib: { + ...(viteConfig.build?.lib as LibraryOptions), + entry: { + index: "./src/full/index.ts", + }, + formats: ["cjs"], + }, + outDir: "dist/miniprogram", + rollupOptions: { + ...viteConfig.build?.rollupOptions, + output: { + ...viteConfig.build?.rollupOptions?.output, + manualChunks: {}, + }, + }, + }, + plugins: [ + ...viteConfig.plugins!, + babel({ + babelConfig: { + plugins: [miniprogramPatch()], + }, + filter: /zxing_(reader|writer|full)\.js$/, + include: /zxing_(reader|writer|full)\.js$/, + }), + ], + configFile: false, + }); + await writeFile( + "dist/miniprogram/package.json", + `${JSON.stringify({ type: "commonjs" }, undefined, 2)}\n`, + ); +} + +buildCjs();