jsx ファイルをプリコンパイルする方法

こちらで使った jsx ファイルをプリコンパイルします。
[React で jsx を使うサンプル (その 3)](https://qiita.com/ekzemplaro/items/9e8fae1e9cb0706fa6f6)

コマンドのインストール

```bash
sudo npm install -g react-tools
```

fetch_test.jsx を fetch_test.js にして src に入れます。

ツリー構造

```text
$ tree
.
└── src
    └── fetch_test.js
```

変換

```text
$ jsx --harmony src/ build/
built Module("fetch_test")
["fetch_test"]
```

変換後のツリー構造

```text
$ tree
.
├── build
│   └── fetch_test.js
└── src
    └── fetch_test.js
```

変換前のファイル

```js:src/fetch_test.js
// -----------------------------------------------------------------------
//
//	fetch_test.jsx
//
//					Mar/03/2022
// -----------------------------------------------------------------------
const getCities = async() => {
//	const url = 'http://localhost/tmp/json/tochigi.json'
	const url = './tochigi.json'
	const response = await fetch(url)

	let text = await response.text()

//	console.log(text)
	const dict_aa = JSON.parse(text)

const Example = () =>
	<table id='table_aa'>
	<thead>
	<tr><th>key</th>
	<th>name</th>
	<th>population</th>
	<th>date_mod</th>
	</tr>
	</thead>
	<tbody>
	{
	Object.entries(dict_aa)
	.map( ([key, value]) =>
	<tr key={key}><td>{key}</td>
		<td>{value["name"]}</td>
		<td>{value["population"]}</td>
		<td>{value["date_mod"]}</td>
		</tr> )
  	}
	</tbody></table>

	ReactDOM.render(<Example />, document.getElementById('root'));

}

// -----------------------------------------------------------------------
console.log("*** start ***")


getCities()

console.log("*** end ***")
// -----------------------------------------------------------------------
```

変換後のファイル

```js:build/fetch_test.js
// -----------------------------------------------------------------------
//
//	fetch_test.jsx
//
//					Mar/03/2022
// -----------------------------------------------------------------------
const getCities = function()  {
//	const url = 'http://localhost/tmp/json/tochigi.json'
	const url = './tochigi.json'
	const response = await fetch(url)

	let text = await response.text()

//	console.log(text)
	const dict_aa = JSON.parse(text)

const Example = function() 
	{return React.createElement("table", {id: "table_aa"}, 
	React.createElement("thead", null, 
	React.createElement("tr", null, React.createElement("th", null, "key"), 
	React.createElement("th", null, "name"), 
	React.createElement("th", null, "population"), 
	React.createElement("th", null, "date_mod")
	)
	), 
	React.createElement("tbody", null, 
	
	Object.entries(dict_aa)
	.map( function($__0 ) 
	{var key=$__0[0],value=$__0[1];return React.createElement("tr", {key: key}, React.createElement("td", null, key), 
		React.createElement("td", null, value["name"]), 
		React.createElement("td", null, value["population"]), 
		React.createElement("td", null, value["date_mod"])
		);})
  	
	));}

	ReactDOM.render(React.createElement(Example, null), document.getElementById('root'));

}

// -----------------------------------------------------------------------
console.log("*** start ***")


getCities()

console.log("*** end ***")
// -----------------------------------------------------------------------
```

このままだと次のエラーが出ます。

```text
Uncaught SyntaxError: await is only valid in async functions
 and the top level bodies of modules
```

そこで次のように編集します。

```js:fetch_test.js
const getCities = async function()  {
（省略）
```

index.html は次のようにします。

```html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>React Elements</title>
</head>
<body>
<div id="root"></div>
<br />
Mar/03/2022<br />
<script src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="fetch_test.js"></script>
</body>
</html>
```