從零創建一個React應用,不使用腳手架工具。(自定義Create React App)

my-init-react-app

  從零創建一個React應用,不使用腳手架工具。
  Github鏈接

創建說明

  一組JavaScript構建工具鏈通常由這些組成:

  • 一個 package 管理器,比如 Yarnnpm。它能讓你充分利用龐大的第三方 package 的生態系統,並且輕鬆地安裝或更新它們。

  • 一個打包器,比如webpackParcel。它能讓你編寫模塊化代碼,並將它們組合在一起成爲小的 package,以優化加載時間。

  • 一個編譯器,例如 Babel。它能讓你編寫的新版本 JavaScript代碼,在舊版瀏覽器中依然能夠工作。

  從頭開始打造你自己的 JavaScript 工具鏈,這個教程重新創建了一些 Create React App 的功能。

文件結構

.
├── LICENSE
├── README.md
├── package.json
├── public
│   └── index.html
├── src
│   ├── App.css
│   ├── App.js
│   └── index.js
├── webpack.config.js
├── .gitignore
└── .babelrc

實現過程:

以下是在mac終端中實現的,具體文件的內容可直接粘貼本項目對應的文件

  1. 初始化npm項目,生成package.json

  2. 初始化git,創建.gitignore忽略指定文件(node_modules等)。

  3. 添加public/index.html

  4. 安裝Babel,創建.babelrc進行配置。

  5. 安裝webpack,創建webpack.config.js進行配置。

  6. 安裝reactreact-dom、熱更新react-hot-loader

  7. 添加src/index.jssrc/App.jssrc/App.css

  8. 配置package.json,修改啓動命令。

  9. 啓動項目。

具體步驟:

 準備:確保本機上已經安裝npmnode、(git)

如果你不打算添加版本控制,所有git操作均可忽略。

  1. 初始化npm項目,生成package.json
npm init -y
  1. 初始化git,創建.gitignore忽略指定文件(node_modules等)。
git init
touch .gitignore

.gitignore

#這個文件是讓git過濾的列表

#過濾依賴
/node_modules

#過濾生產
/dist/
/build/

#蘋果系統的隱藏文件
.DS_Store
  1. 添加public/index.html
mkdir public
cd public
touch index.html

index.html

<!-- sourced from https://raw.githubusercontent.com/reactjs/reactjs.org/master/static/html/single-file-example.html -->
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>React Starter</title>
</head>

<body>
  <div id="root"></div>
  <noscript>
    You need to enable JavaScript to run this app.
  </noscript>
  <script src="../dist/bundle.js"></script>
</body>

</html>

  這裏引入的bundle.js後面會用到。

  1. 安裝Babel,創建.babelrc進行配置
cd ..
npm install -D @babel/[email protected] @babel/[email protected] @babel/[email protected] @babel/[email protected].
touch .babelrc

.babelrc

{
  "presets": ["@babel/env", "@babel/preset-react"]
}
  1. 安裝webpack,創建webpack.config.js進行配置。
npm install -g -D webpack webpack-cli webpack-dev-server style-loader css-loader babel-loader
touch webpack.config.js

webpack.config.js

const path = require("path");
const webpack = require("webpack");

module.exports = {
  entry: "./src/index.js",
  mode: "development",
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /(node_modules|bower_components)/,
        loader: "babel-loader",
        options: { presets: ["@babel/env"] }
      },
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"]
      }
    ]
  },
  resolve: { extensions: ["*", ".js", ".jsx"] },
  output: {
    path: path.resolve(__dirname, "dist/"),
    publicPath: "/dist/",
    filename: "bundle.js"
  },
  devServer: {
    contentBase: path.join(__dirname, "public/"),
    port: 3000,
    publicPath: "http://localhost:3000/dist/",
    hotOnly: true
  },
  plugins: [new webpack.HotModuleReplacementPlugin()]
};
  1. 安裝reactreact-dom、熱更新react-hot-loader
npm install -D react react-dom react-hot-loader
  1. 添加src/index.jssrc/App.jssrc/App.css
mkdir src
cd src
touch index.js
touch App.js
touch App.css

index.js

import React from "react";
import ReactDOM from "react-dom";
import App from "./App.js";
ReactDOM.render(<App />, document.getElementById("root"));

App.js

import React, { Component} from "react";
import {hot} from 'react-hot-loader';
import "./App.css";

class App extends Component{
  render(){
    return(
      <div className="App">
        <h1> Hello</h1>
      </div>
    );
  }
}

export default hot(module)(App);

App.css

.App {
  margin: 1rem;
  font-family: Arial, Helvetica, sans-serif;
  border: 1px solid red;
}
  1. 配置package.json,修改啓動命令。

  在package.json裏配置scripts字段。

"scripts": {
    "start": "webpack-dev-server --mode development",
    "test": "echo \"Error: no test specified\" && exit 1"
  }
  1. 啓動項目。
npm start

  在瀏覽器鍵入http://localhost:3000以啓動項目

參考資料

Creating a React App… From Scratch.
Webpack - webpack-dev-server: command not found
推送提交到遠程倉庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章