This commit is contained in:
swrup 2025-11-11 02:07:51 +01:00
parent aa2ff7b2f0
commit 2f3113f55d
11742 changed files with 1223940 additions and 0 deletions

View file

@ -0,0 +1,162 @@
Parses the full form (<module-system> <extension>)
$ cat > dune-project <<EOF
> (lang dune 3.8)
> (using melange 0.1)
> EOF
$ cat > dune <<EOF
> (melange.emit
> (alias mel)
> (target output)
> (emit_stdlib false)
> (module_systems
> (commonjs bs.js)
> (es6 mjs)))
> EOF
$ cat > main.ml <<EOF
> let () = Js.log "hello"
> EOF
$ dune build @mel --display=short
melc .output.mobjs/melange/melange__Main.{cmi,cmj,cmt}
melc output/main.bs.js
melc output/main.mjs
Outputs both module systems
$ ls _build/default/output
main.bs.js
main.mjs
$ node _build/default/output/main.bs.js
hello
$ node _build/default/output/main.mjs
hello
Parses the simplified form and defaults extension to `.js`
$ dune clean
$ cat > dune <<EOF
> (melange.emit
> (alias mel)
> (target output)
> (emit_stdlib false)
> (module_systems
> commonjs
> (es6 mjs)))
> EOF
$ cat > main.ml <<EOF
> let () = Js.log "hello"
> EOF
$ dune build @mel --display=short
melc .output.mobjs/melange/melange__Main.{cmi,cmj,cmt}
melc output/main.js
melc output/main.mjs
$ ls _build/default/output
main.js
main.mjs
Accepts `"esm"` too for ESM modules
$ dune clean
$ cat > dune <<EOF
> (melange.emit
> (alias mel)
> (target output)
> (emit_stdlib false)
> (module_systems commonjs (esm mjs)))
> EOF
$ dune build @mel
$ ls _build/default/output
main.js
main.mjs
Defaults to commonjs / `.js` if no config present at all
$ dune clean
$ cat > dune <<EOF
> (melange.emit
> (alias mel)
> (emit_stdlib false)
> (target output))
> EOF
$ cat > main.ml <<EOF
> let () = Js.log "hello"
> EOF
$ dune build @mel --display=short
melc .output.mobjs/melange/melange__Main.{cmi,cmj,cmt}
melc output/main.js
$ ls _build/default/output
main.js
Errors out if extension starts with dot
$ cat > dune <<EOF
> (melange.emit
> (target output)
> (alias mel)
> (emit_stdlib false)
> (module_systems (commonjs .bs.js)))
> EOF
$ dune build @mel --display=short
File "dune", line 5, characters 27-33:
5 | (module_systems (commonjs .bs.js)))
^^^^^^
Error: extension must not start with '.'
[1]
Errors if the same extension is present multiple times
$ dune clean
$ cat > dune <<EOF
> (melange.emit
> (alias mel)
> (target output)
> (emit_stdlib false)
> (module_systems commonjs es6))
> EOF
$ cat > main.ml <<EOF
> let () = Js.log "hello"
> EOF
$ dune build @mel --display=short
File "dune", line 5, characters 26-29:
5 | (module_systems commonjs es6))
^^^
Error: JavaScript extension .js appears more than once:
- dune:5
- dune:5
Extensions must be unique per melange.emit stanza
Hint: specify different extensions with (module_systems (<system1>
<extension1>) (<system2> <extension2>))
[1]
$ cat > dune <<EOF
> (melange.emit
> (alias mel)
> (target output)
> (emit_stdlib false)
> (module_systems (commonjs bs.js) commonjs (es6 bs.js)))
> EOF
$ cat > main.ml <<EOF
> let () = Js.log "hello"
> EOF
$ dune build @mel --display=short
File "dune", line 5, characters 48-53:
5 | (module_systems (commonjs bs.js) commonjs (es6 bs.js)))
^^^^^
Error: JavaScript extension .bs.js appears more than once:
- dune:5
- dune:5
Extensions must be unique per melange.emit stanza
Hint: specify different extensions with (module_systems (<system1>
<extension1>) (<system2> <extension2>))
[1]