In the project directiory:
create scripts for package.json:
"scripts": {
"start": "webpack --mode=development --watch",
"build": "webpack --mode-production",
...
...
},
In the project directiory:
Install: webpack, webpack-cli, webpack-dev-server
Install: @babel/core, babel-loader, @babel/preset-env, @babel/preset-react
Install: react, react-dom
Install: typescript
Install: styleloader, css-loader
Install: html-webpack-plugin
Install: react-bootstrap, bootstrap
Install: axios
Install: react-yandex-maps
in my case: npm install --save react-yandex-maps
In the project root directory:
webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
mode: 'development',
devtool: "source-map",
entry: "./src/index.tsx",
output: {
path: path.join(__dirname, "/dist"),
filename: "bundle.js"
},
resolve:{
extensions: [".js", ".jsx", ".json", ".ts", ".tsx"]
},
module: {
rules: [
{
test: /\.(ts|tsx)$/,
exclude: /node_modules/,
use: {
loader: "ts-loader"
}
},
{
test: /\.css$/,
use: ["style-loader", "css-loader"]
}
]
},
plugins: [
new HtmlWebpackPlugin({
template:"./src/index.html"
})
]
};
tsconfig.json
{
"compilerOptions": {
"jsx": "react"
},
"exclude": [
"node_modules"
]
}
./components
./styles
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>F1. Exercise</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
import * as React from "react";
import { render } from "react-dom";
/*
* index.tsx подключает App.tsx к index.html с помощью ReactDOM
* поэтому нам необходимо их импортировать
**/
// import ReactDOM from "react-dom/client";
import App from "./components/App"
/*
* Все компоненты собираются в App.tsx
* App.tsx - это верхний уровень, внутрь которого подгружаются
* остальные компонентыю
* Далее, всё рендерится с помощью ReactDOM и подвязывается
* к index.html через <div id="root">
**/
render(<App/>, document.getElementById("root"));
import * as React from "react";
function App() {
return (
<>
<h1>Hello</h1>
</>
)
}
export default App;