Przejdź do treści
Biblioteka skilli
Programowanie · Konwersja i formaty

npm-publishing

/npm-publishing

Publikuje biblioteki OCaml do npm przez js_of_ocaml i wasm_of_ocaml, z podziałem na gałęzie dla przeglądarki i WASM.

Licencja
ISC
Ostatnia zmiana repozytorium
02.09.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
3
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
1
Przestarzałość

Brak sygnałów. Repozytorium zmienione 02.09.2026, bez odwołań do wycofanych modeli i API.

Licencja

ISC, otwarta.

Co robi i kiedy

Publikuje biblioteki OCaml do npm przez js_of_ocaml i wasm_of_ocaml, z podziałem na gałęzie dla przeglądarki i WASM.

Oryginalny opis (EN)

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.

Jak działa

  1. When to Use This Skill
  2. Branch Structure
  3. Dune Build Rules
  4. Creating the NPM Branch
  5. NPM Branch Files
  6. Workflow Summary
  7. README for npm
Sekcje z nagłówków SKILL.md, w oryginale · 150 linii, 391 słów
Podgląd SKILL.md
---
name: 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.
---

# 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`:

```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

```dune
(package
 (name mylib-js)
 (synopsis "Browser library via js_of_ocaml/wasm_of_ocaml")
 (depends
  (ocaml (>= 5.1.0))
  (mylib (= :version))
  (js_of_ocaml (>= 5.0))
  (js_of_ocaml-ppx (>= 5.0))
  (wasm_of_ocaml-compiler (>= 5.0))
  (brr (>= 0.0.6))))
```

## Creating the NPM Branch

```bash
# Create orphan branch
git switch --orphan npm

# Add npm-specific files
git add package.json README.md LICENSE release.sh .gitignore
git commit -m "Initial npm package setup"

# Switch back
git checkout main
```

## NPM Branch Files

See `templates/` for:
- `package.json.template`
- `release.sh.template`

### package.json

```json
{
  "name": "mylib-jsoo",
  "version": "1.0.0",
  "description": "Description here",
  "browser": "mylib.js",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/user/repo.git#npm"
  },
  "files": [
    "mylib.js",
    "mylib.wasm.js",
    "mylib_js_main.bc.wasm.assets/",
    "README.md",
    "LICENSE"
  ]
}
```

Key points:
- Use `"browser"` not `"main"` (js_of_ocaml is browser-only)
- Point repository URL to `#npm` branch
- Include WASM assets directory

### release.sh

Script to copy built assets from main branch to npm branch.

## Workflow Summary

1. Develop on `main` branch (OCaml source)
2. Build: `dune build @install`
3. Switch to `npm` branch
4. Run `./release.sh` to copy built assets
5. Update version in `package.json`
6. Commit and `npm publish`

## README for npm

Focus on browser usage:
1. Clear browser-only notice
2. Installation via npm
3. Browser usage with `<script>` tags
4. Both JS and WASM examples
5. Browser compatibility requirements
Pliki w paczce (3)
  • SKILL.md 3 KB
  • templates/package.json.template 1 KB
  • templates/release.sh.template 1 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · avsm/ocaml-claude-marketplace100ISC
dxos/dxos100Apache-2.0
Amey-Thakur/AI-SKILLS90MIT

Migawka bazy z 28.10.2026 · wersja paczki 0311bf259443 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100secure-npm-package
    Przygotowuje i utwardza wydanie pakietu npm z Trusted lub Staged Publishing, także dla pakietów z błędem E404 po pierwszej publikacji.
  • 100npm
    Pomaga zarządzać zależnościami JavaScript i Node.js: package.json, pliki lock, workspaces w monorepo, skrypty, audyty bezpieczeństwa i publikowanie pakietów.
  • 90publishing-packages
    Opisuje konwencje publikowania pakietów npm z tego repozytorium, w tym kiedy pull request wymaga changesetu i jak go napisać.
  • 100project-setup
    Opisuje standardy plików metadanych projektów OCaml: inicjalizację biblioteki lub modułu, wydanie przez opam, CI oraz wymagane pliki .mli i .ocamlformat.
  • 100publish-npm-package
    Pokazuje, jak publikować pakiety do npm przez GitHub Actions, z trusted publishing, provenance i semantic-release.
  • 100testing
    Opisuje strategie testów bibliotek OCaml: strukturę testów, alcotest, mocki eio i rozwój oparty na testach.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.