擺脫create-react-app,來讓我們自己搭建一個react腳手架
一. 初始化npm、安裝webpack和react
- 建立一個資料夾REACT-CNODE-TEACH
mkdir REACT-CNODE-TEACH - 在資料夾中npm init(我們使用npm來管理依賴包)
一路點回車就行,當然你也可以去詳細配置下工程資訊。 - 裝一個webpack
- 一個react工程,怎麼能不安裝react?
二. 客戶端webpack配置檔案
- 這個時候我們要配置一下webpack,我們先在工程根目錄建立一個資料夾build,然後建立一個webpack配置檔案webpack.config.js。這時,我們可以簡單配置一下webpack:
const path = require('path')
const HTMLPlugin = require('html-webpack-plugin')
module.exports = {
//應用入口
entry: {
app: path.join(__dirname, '../client/app.js')
},
//打包的檔案路徑
output: {
filename: '[name].[hash].js',
path: path.join(__dirname, '../dist'),
//靜態資源輸出路徑
publicPath: ''
},
//用於識別jsx
module: {
rules: [
{
test: /.jsx$/,//正規表示式
loader: 'babel-loader'
},
{
test: /.js$/,//正規表示式
exclude: path.join(__dirname, '../node_modules'),
loader: 'babel-loader'
}
]
},
plugins: [
//生成一個html檔案,同時注入entry
new HTMLPlugin()
]
}
- 這個時候我們就可以用webpack來編譯工程了。為了操作方便,我們自定義一個npm命令:
三. 安裝和配置babel
- 安裝babel
- babel要想正常使用,還需要在工程根目錄新增babel配置檔案.babelrc.js
{
//babel預設編譯es6 es7 es8 不認識jsx 需要配置
"presets": [
["es2015", {"loose": true}],
"react"
]
}
- babel中用到的包也要安裝一下
- 此時一個react工程最初的樣子已經出來了
四. 服務端webpack配置檔案
還記得我們在client端是通過把<App/>
渲染到document.body
中,
//應用入口
import React from 'react'
import ReactDom from 'react-dom'//把react渲染成dom
import App from './App.jsx'
ReactDom.render(<App/>, document.getElementById('root'))
可是服務端是沒有document.body
的,這裡暫且放一下,我們先來配置一下服務端webpack
const path = require('path')
module.exports = {
target: 'node',//表示webpack打包出來的js是使用在哪個平臺的
//應用入口
entry: {
app: path.join(__dirname, '../client/server-entry.js')
},
//打包的檔案路徑
output: {
filename: 'server-entry.js',
path: path.join(__dirname, '../dist'),
//靜態資源輸出路徑
publicPath: '',
libraryTarget: 'commonjs2'
},
//用於識別jsx
module: {
rules: [
{
test: /.jsx$/,//正規表示式
loader: 'babel-loader'
},
{
test: /.js$/,//正規表示式
exclude: path.join(__dirname, '../node_modules'),
loader: 'babel-loader'
}
]
},
}
接著來寫服務端程式碼,這裡用到了node的express框架
const express = require('express')
const ReactSSR = require('react-dom/server')
const fs = require('fs')
const path = require('path')
const template = fs.readFileSync(path.join(__dirname, '../dist/index.html'), 'utf8')
const serverEntry = require('../dist/server-entry').default
const app = express()
app.get('*', function(req, res) {
const appString = ReactSSR.renderToString(serverEntry)
res.send(template.replace('<app></app>', appString))
})
app.listen(3333, function() {
console.log('listening on 3333')
})
服務端渲染的內容會替換前端模板
html中的標籤
<html>
<head>
<title>Document</title>
</head>
<body>
<div id="root"><app></app></div>
</body>
</html>
五. webpack dev server配置
它可以幫我們通過webpack啟動一個服務,它的檔案是存在在記憶體中的,每次有檔案變化,它都會自動執行編譯,這樣就不需手動執行了。
六. hot module replacement配置
有了它,只要檔案有變化,頁面就會自動重新整理
程式碼倉庫在此。
相關文章
- 讓我們用gulp寫個前端腳手架前端
- 自己搭建一個vue專案(腳手架)Vue
- React(腳手架)——create-react-app擼api(三)ReactAPPAPI
- 搭建一個自己的 Laravel API 腳手架 - DelightureLaravelAPI
- 從零開始搭建一個 React + Mobx + React Router 腳手架React
- 開發 react 應用最好用的腳手架 create-react-appReactAPP
- Dva手腳架搭建React專案React
- react+typescript+antd腳手架搭建ReactTypeScript
- 基於React的腳手架搭建React
- 如何自己開發一個腳手架工具
- Vue+webpack搭建自己的腳手架VueWeb
- 用commander做一個自己的eslint腳手架EsLint
- 用腳手架搭建一個 vue 專案Vue
- 前端如何搭建一個成熟的腳手架前端
- 搭建自己的腳手架—“優雅”生成前端工程前端
- 前端如何搭建一個簡單的腳手架前端
- React入門---react腳手架React
- Vite 2.0 + React + TypeScript + Antd 搭建簡單腳手架ViteReactTypeScript
- 仿 vue-cli 搭建屬於自己的腳手架Vue
- React腳手架之NextJsReactNextJS
- 在create-react-app官方腳手架中引入redux資料管理工具ReactAPPRedux
- 新手搭建簡潔的Express-React-Redux腳手架ExpressReactRedux
- 分享一個springboot腳手架Spring Boot
- 讓我們來做一個屬於自己的瀏覽器主頁吧!瀏覽器
- 一步一步搭建腳手架
- react 高效高質量搭建後臺系統 系列 —— 腳手架搭建React
- 基於webpack4.X從零搭建React腳手架WebReact
- 服務端渲染的React手腳架。完美使用 React, Redux, and React-Router!最好用的腳手架服務端ReactRedux
- 走進Vue-cli原始碼,自己動手搭建前端腳手架工具Vue原始碼前端
- 9102年:手寫一個React腳手架 【已優化至完美版】React優化
- 如何用vue搭建腳手架Vue
- 搭建webpack簡易腳手架Web
- 有個功能豐富的 react 腳手架,瞭解下?React
- 不借助腳手架手動搭建react專案(webpack5 + Antd4 + React18)ReactWeb
- 快速搭建一個go語言web後端服務腳手架GoWeb後端
- 從零搭建一個前端cli腳手架併發布到npm前端NPM
- 如何開發自己的 yeoman 腳手架
- Vue2.0搭建腳手架流程Vue