|
488 | 488 | <h1><a href="https://github.com/bucklescript/bucklescript">BuckleScript</a> User Manual</h1>
|
489 | 489 | <div class="details">
|
490 | 490 | <span id="author" class="author">Hongbo Zhang</span><br>
|
491 |
| -<span id="revnumber">version 1.7.0</span> |
| 491 | +<span id="revnumber">version 1.9.0</span> |
492 | 492 | </div>
|
493 | 493 | <div id="toc" class="toc2">
|
494 | 494 | <div id="toctitle">Table of Contents</div>
|
@@ -679,6 +679,8 @@ <h1><a href="https://github.com/bucklescript/bucklescript">BuckleScript</a> User
|
679 | 679 | </ul>
|
680 | 680 | </li>
|
681 | 681 | <li><a href="#_a_real_world_example_of_using_code_bsb_code">A real world example of using <code>bsb</code></a></li>
|
| 682 | +<li><a href="#_namespace_support_since_1_9_0">namespace support (@since 1.9.0)</a></li> |
| 683 | +<li><a href="#_in_source_build_support_since_1_9_0">In source build support (@since 1.9.0)</a></li> |
682 | 684 | <li><a href="#_build_using_make">Build using Make</a></li>
|
683 | 685 | <li><a href="#_customize_rules_generators_support_since_1_7_4">Customize rules (generators support, @since 1.7.4)</a></li>
|
684 | 686 | </ul>
|
@@ -3535,8 +3537,10 @@ <h3 id="_return_value_checking_since_1_5_1"><a class="anchor" href="#_return_val
|
3535 | 3537 | </div>
|
3536 | 3538 | </div>
|
3537 | 3539 | <div class="paragraph">
|
3538 |
| -<p>Currently 3 directives are supported: <code>null_to_opt</code>, <code>undefined_to_opt</code>, |
3539 |
| -<code>nullable</code> and <code>identity</code>.</p> |
| 3540 | +<p>Currently 4 directives are supported: <code>null_to_opt</code>, <code>undefined_to_opt</code>, |
| 3541 | +<code>nullable</code>(introduced in @1.9.0) and <code>identity</code>. |
| 3542 | +<code>null_undefined_to_opt</code> works the same as <code>nullable</code>, |
| 3543 | +but it is deprecated, <code>nullable</code> is encouraged</p> |
3540 | 3544 | </div>
|
3541 | 3545 | <div class="admonitionblock note">
|
3542 | 3546 | <table>
|
@@ -4692,7 +4696,7 @@ <h3 id="_bucklescript_build_system_code_bsb_code"><a class="anchor" href="#_buck
|
4692 | 4696 | It is designed for a fast feedback loop (typically 100ms feedback loop) and works cross platform.</p>
|
4693 | 4697 | </div>
|
4694 | 4698 | <div class="paragraph">
|
4695 |
| -<p><code>bsb</code> can be running in any subdirectory. It is a schema based build tool and the schema is |
| 4699 | +<p><code>bsb</code> is a schema based build tool. The schema is |
4696 | 4700 | <a href="http://bucklescript.github.io/bucklescript/docson/#build-schema.json">available</a>. It is strongly recommended to <strong>check out the <a href="http://bucklescript.github.io/bucklescript/docson/#build-schema.json">schema</a></strong>
|
4697 | 4701 | after you finish reading the tutorials below.</p>
|
4698 | 4702 | </div>
|
@@ -5044,6 +5048,73 @@ <h3 id="_a_real_world_example_of_using_code_bsb_code"><a class="anchor" href="#_
|
5044 | 5048 | </div>
|
5045 | 5049 | </div>
|
5046 | 5050 | <div class="sect2">
|
| 5051 | +<h3 id="_namespace_support_since_1_9_0"><a class="anchor" href="#_namespace_support_since_1_9_0"></a>namespace support (@since 1.9.0)</h3> |
| 5052 | +<div class="paragraph"> |
| 5053 | +<p>OCaml treat file names as modules, so that users can only have unique file names in a project, BuckleScript solves |
| 5054 | +the problem by scoping all modules by package.</p> |
| 5055 | +</div> |
| 5056 | +<div class="paragraph"> |
| 5057 | +<p>Below is the <code>bsconfig.json</code> for <code>liba</code>, <code>libb</code> (they share the same configuration in this example)</p> |
| 5058 | +</div> |
| 5059 | +<div class="listingblock"> |
| 5060 | +<div class="content"> |
| 5061 | +<pre class="pygments highlight"><code data-lang="js"><span class="tok-p">{</span> |
| 5062 | + <span class="tok-s2">"name"</span><span class="tok-o">:</span> <span class="tok-s2">"liba"</span><span class="tok-p">,</span> |
| 5063 | + <span class="tok-s2">"version"</span><span class="tok-o">:</span> <span class="tok-s2">"0.1.0"</span><span class="tok-p">,</span> |
| 5064 | + <span class="tok-s2">"sources"</span><span class="tok-o">:</span> <span class="tok-s2">"src"</span><span class="tok-p">,</span> |
| 5065 | + <span class="tok-s2">"namespace"</span><span class="tok-o">:</span> <span class="tok-kc">true</span> |
| 5066 | +<span class="tok-p">}</span></code></pre> |
| 5067 | +</div> |
| 5068 | +</div> |
| 5069 | +<div class="paragraph"> |
| 5070 | +<p>Now you have a library to use them</p> |
| 5071 | +</div> |
| 5072 | +<div class="listingblock"> |
| 5073 | +<div class="content"> |
| 5074 | +<pre class="pygments highlight"><code data-lang="js"><span class="tok-p">{</span> |
| 5075 | + <span class="tok-s2">"name"</span><span class="tok-o">:</span> <span class="tok-s2">"namespace"</span><span class="tok-p">,</span> |
| 5076 | + <span class="tok-s2">"version"</span><span class="tok-o">:</span> <span class="tok-s2">"0.1.0"</span><span class="tok-p">,</span> |
| 5077 | + <span class="tok-s2">"sources"</span><span class="tok-o">:</span> <span class="tok-s2">"src"</span><span class="tok-p">,</span> |
| 5078 | + <span class="tok-s2">"bs-dependencies"</span><span class="tok-o">:</span> <span class="tok-p">[</span> |
| 5079 | + <span class="tok-s2">"liba"</span><span class="tok-p">,</span> |
| 5080 | + <span class="tok-s2">"libb"</span> |
| 5081 | + <span class="tok-p">]</span> |
| 5082 | +<span class="tok-p">}</span></code></pre> |
| 5083 | +</div> |
| 5084 | +</div> |
| 5085 | +<div class="paragraph"> |
| 5086 | +<p>Since <code>liba</code> and <code>libb</code> is configured using namespace, to use them in source code, it would be like</p> |
| 5087 | +</div> |
| 5088 | +<div class="listingblock"> |
| 5089 | +<div class="content"> |
| 5090 | +<pre class="pygments highlight"><code data-lang="ocaml"><span class="tok-k">let</span> <span class="tok-n">v</span> <span class="tok-o">=</span> |
| 5091 | + <span class="tok-o">(</span><span class="tok-nn">Liba</span><span class="tok-p">.</span><span class="tok-nn">Demo</span><span class="tok-p">.</span><span class="tok-n">v</span> <span class="tok-o">+</span> <span class="tok-nn">Libb</span><span class="tok-p">.</span><span class="tok-nn">Demo</span><span class="tok-p">.</span><span class="tok-n">v</span><span class="tok-o">)</span></code></pre> |
| 5092 | +</div> |
| 5093 | +</div> |
| 5094 | +<div class="admonitionblock note"> |
| 5095 | +<table> |
| 5096 | +<tr> |
| 5097 | +<td class="icon"> |
| 5098 | +<div class="title">Note</div> |
| 5099 | +</td> |
| 5100 | +<td class="content"> |
| 5101 | +<div class="paragraph"> |
| 5102 | +<p>In the same package, everything works the same whether it uses namespace or not, it only affect |
| 5103 | +people who use your library</p> |
| 5104 | +</div> |
| 5105 | +</td> |
| 5106 | +</tr> |
| 5107 | +</table> |
| 5108 | +</div> |
| 5109 | +</div> |
| 5110 | +<div class="sect2"> |
| 5111 | +<h3 id="_in_source_build_support_since_1_9_0"><a class="anchor" href="#_in_source_build_support_since_1_9_0"></a>In source build support (@since 1.9.0)</h3> |
| 5112 | +<div class="paragraph"> |
| 5113 | +<p>When user has an existing JS project, it makes sense to output the JS file in the same directory as vanilla JS, |
| 5114 | +the schema added a key called <code>in-source</code> so that generate JS file next to ML file.</p> |
| 5115 | +</div> |
| 5116 | +</div> |
| 5117 | +<div class="sect2"> |
5047 | 5118 | <h3 id="_build_using_make"><a class="anchor" href="#_build_using_make"></a>Build using Make</h3>
|
5048 | 5119 | <div class="admonitionblock warning">
|
5049 | 5120 | <table>
|
@@ -6357,7 +6428,7 @@ <h3 id="_1_0"><a class="anchor" href="#_1_0"></a>1.0</h3>
|
6357 | 6428 | </div>
|
6358 | 6429 | <div id="footer">
|
6359 | 6430 | <div id="footer-text">
|
6360 |
| -Version 1.7.0<br> |
| 6431 | +Version 1.9.0<br> |
6361 | 6432 | </div>
|
6362 | 6433 | </div>
|
6363 | 6434 | </body>
|
|
0 commit comments