| name | ocaml-npm-publishing |
| description | Publishing OCaml to npm via js_of_ocaml and wasm_of_ocaml. Use when discussing browser targets, JavaScript compilation, WASM output, npm packages, or the two-branch workflow. |
| license | ISC |
OCaml to NPM Publishing
When to Use This Skill
Invoke this skill when:
- Setting up npm publishing for OCaml projects
- Configuring js_of_ocaml or wasm_of_ocaml
- Discussing browser targets for OCaml
- Creating the npm branch workflow
Branch Structure
main branch - OCaml source code, dune build files, opam packages
npm branch - Built JavaScript/WASM assets, package.json, README for npm
The npm branch is an orphan branch with no shared history.
Dune Build Rules
Library with Browser Bindings
In lib/js/dune:
; Library compiled to bytecode (required for js_of_ocaml)
(library
(name mylib_js)
(public_name mylib-js)
(libraries mylib brr)
(modes byte)
(modules mylib_js))
; Executable compiled to both JS and WASM
(executable
(name mylib_js_main)
(libraries mylib_js)
(js_of_ocaml)
(modes js wasm)
(modules mylib_js_main))
; Friendly filename for JS
(rule
(targets mylib.js)
(deps mylib_js_main.bc.js)
(action (copy %{deps} %{targets})))
; Friendly filename for WASM
(rule
(targets mylib.wasm.js)
(deps mylib_js_main.bc.wasm.js)
(action (copy %{deps} %{targets})))
; Install web assets
(install
(package mylib-js)
(section share)
(files
mylib.js
mylib.wasm.js
(glob_files_rec (mylib_js_main.bc.wasm.assets/* with_prefix mylib_js_main.bc.wasm.assets))))
dune-project Package