Skip to content

Commit fc9988e

Browse files
rxliuliclaude
andcommitted
feat: add browser-only WASM build to eliminate Node.js require() warnings in bundlers
When bundling sql.js for browser environments, tools like Vite, Webpack, and esbuild emit warnings about `require("node:fs")` and `require("node:crypto")` being externalized for browser compatibility. This adds a new `sql-wasm-browser.js` build variant compiled with `-s ENVIRONMENT=web,worker`, which completely eliminates Node.js code paths from the generated JavaScript. The browser variant is exposed via the `exports` field in package.json using the `browser` condition, so bundlers automatically select the clean version. The original `sql-wasm.js` with full Node.js support is preserved as the `default` export, ensuring no breaking changes for existing users. Closes #620 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 52e5649 commit fc9988e

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

Makefile

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ EMFLAGS_WASM = \
5050
-s WASM=1 \
5151
-s ALLOW_MEMORY_GROWTH=1
5252

53+
EMFLAGS_WASM_BROWSER = \
54+
-s WASM=1 \
55+
-s ALLOW_MEMORY_GROWTH=1 \
56+
-s ENVIRONMENT=web,worker
57+
5358
EMFLAGS_OPTIMIZED= \
5459
-Oz \
5560
-flto \
@@ -73,7 +78,7 @@ EXPORTED_METHODS_JSON_FILES = src/exported_functions.json src/exported_runtime_m
7378
all: optimized debug worker
7479

7580
.PHONY: debug
76-
debug: dist/sql-asm-debug.js dist/sql-wasm-debug.js
81+
debug: dist/sql-asm-debug.js dist/sql-wasm-debug.js dist/sql-wasm-browser-debug.js
7782

7883
dist/sql-asm-debug.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
7984
$(EMCC) $(EMFLAGS) $(EMFLAGS_DEBUG) $(EMFLAGS_ASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
@@ -87,8 +92,14 @@ dist/sql-wasm-debug.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FI
8792
cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
8893
rm out/tmp-raw.js
8994

95+
dist/sql-wasm-browser-debug.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
96+
$(EMCC) $(EMFLAGS) $(EMFLAGS_DEBUG) $(EMFLAGS_WASM_BROWSER) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
97+
mv $@ out/tmp-raw.js
98+
cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
99+
rm out/tmp-raw.js
100+
90101
.PHONY: optimized
91-
optimized: dist/sql-asm.js dist/sql-wasm.js dist/sql-asm-memory-growth.js
102+
optimized: dist/sql-asm.js dist/sql-wasm.js dist/sql-wasm-browser.js dist/sql-asm-memory-growth.js
92103

93104
dist/sql-asm.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
94105
$(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_ASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
@@ -102,6 +113,12 @@ dist/sql-wasm.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $
102113
cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
103114
rm out/tmp-raw.js
104115

116+
dist/sql-wasm-browser.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
117+
$(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_WASM_BROWSER) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
118+
mv $@ out/tmp-raw.js
119+
cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
120+
rm out/tmp-raw.js
121+
105122
dist/sql-asm-memory-growth.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
106123
$(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_ASM_MEMORY_GROWTH) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
107124
mv $@ out/tmp-raw.js

package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818
],
1919
"license": "MIT",
2020
"main": "./dist/sql-wasm.js",
21+
"exports": {
22+
".": {
23+
"browser": "./dist/sql-wasm-browser.js",
24+
"default": "./dist/sql-wasm.js"
25+
},
26+
"./dist/*": "./dist/*"
27+
},
2128
"scripts": {
2229
"build": "make",
2330
"rebuild": "npm run clean && npm run build",

0 commit comments

Comments
 (0)