摘要:首先安裝然后在的里面加入和兩個命令在建立一個服務器為你的代碼創建源地址。更新使用語法編寫修改加載器的配置方法將添加文件改為在中配置加載器的配置方法接下來需要配置,告訴我們使用了和插件。
TL;DR
$ git clone https://github.com/nodejh/start-react-with-webpack react-sample $ cd react-sample && npm install $ npm run dev
然后打開瀏覽器輸入 http://localhost:8080,并嘗試隨意修改一下 app 目錄里面的代碼,就能看到效果了。
為了避免包版本問題導致程序不能運行,根目錄下有一個 npm-shrinkwrap.json 文件,這里面所有包的版本都是固定的。 npm install 時首先會檢查在根目錄下有沒有 npm-shrinkwrap.json,如果 shrinkwrap 文件存在的話,npm 會使用它(而不是 package.json)來確定安裝的各個包的版本號信息。
1. 安裝并配置 Webpack首先創建并初始化一個項目目錄:
$ mkdir react-sample && cd react-sample $ npm init
安裝 webpack:
$ npm i webpack --save-dev
然后配置 webpack.config.js:
# 創建一個 webpack.config.js 文件 $ touch webpack.config.js
在該文件中加入下面的內容:
const webpack = require("webpack"); const path = require("path"); // 定義打包目錄路徑 const BUILD_DIR = path.resolve(__dirname, "./build"); // 定義組件目錄路徑 const APP_DIR = path.resolve(__dirname, "./app"); const config = { entry: `${APP_DIR}/index.jsx`, // 文件打包的入口點 output: { path: BUILD_DIR, // 輸出目錄的絕對路徑 filename: "bundle.js", // 輸出的每個包的相對路徑 }, resolve: { extensions: ["", ".js", ".jsx"], // 開啟后綴名的自動補全 }, }; module.exports = config;
這是一個最基本的 webpack 配置文件。
接下來在 build/ 目錄中創建一個 index.html 文件:
2. 配置加載器 babel-loaderStart React with Webpack
加載器是把一個資源文件作為入參轉換為另一個資源文件的 node.js 函數。
由于我們寫 React 的時候使用的是 JSX 語法和 ES6 語法,而瀏覽器并不完全支持它們。所以需要使用 babel-loader 來讓 webpack 加載 JSX 和 ES6 的文件。
babel-loader 的主要作用如下圖:
安裝依賴包:
$ npm i babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev
babel-preset-es2015 是轉換 ES6 的包;babel-preset-react 是轉換 JSX 的包。
接下來需要修改 webpack.config.js:
// Existing Code .... const config = { // Existing Code .... module: { loaders: [{ test: /.(js|jsx)$/, exclude: /(node_modules|bower_components)/, loader: "babel-loader", query: { presets: ["es2015", "react"] } }] } };3. Hello React
安裝 React:
$ npm i react react-dom --save
在 app 目錄下新建一個 index.jsx 文件,然后將下面的內容添加到 index.jsx 中:
import React from "react"; import {render} from "react-dom"; class App extends React.Component { render () { returnHello React!
; } } render(, document.getElementById("app"));
這個時候,執行下面的命令打包:
webpack -w
-w 參數表示持續監測項目目錄,如果文件發生修改,則重新打包。
打包完成后,將 build/index.html 用瀏覽器打開,就能看到 Hello React!,如下:
4. 自動刷新和熱加載懶是第一生產力。每次寫完代碼,都要重新打包,重新刷新瀏覽器才能看到結果,顯然很麻煩。
那有沒有能夠自動刷新瀏覽器的方法呢?當然有,這個時候就需要 webpack-dev-server 這個包。
$ npm install webpack-dev-server -g
webpack-dev-server 提供了兩種自動刷新模式:
Iframe 模式
不需要額外配置,只用修改路徑
應用被嵌入了一個 iframe 內部,頁面頂部可以展示打包進度信息
因為 Iframe 的關系,如果應用有多個頁面,無法看到當前頁面的 URL 信息
inline 模式
需要添加 --inline 配置參數
提示信息在控制臺中和瀏覽器的console中顯示
頁面的 URL 改變,可以在瀏覽器地址欄看見
接下來啟動 webpack-dev-server:
$ webpack-dev-server --inline --hot --content-base ./build/
--hot 參數就是熱加載,即在不刷新瀏覽器的條件下,應用最新的代碼更新。在瀏覽器中可能看到這樣的輸出:
[HMR] Waiting for update signal from WDS... [WDS] Hot Module Replacement enabled.
--content-base ./ 參數表示將當前目錄作為 server 根目錄。命令啟動后,會在 8080 端口創建一個 HTTP 服務,通過訪問 http://localhost:8080/index.html 就可以訪問我們的項目了,并且修改了項目中的代碼后,瀏覽器會自動刷新并實現熱加載。
當然,命令行輸入這么長,還是不太方便,所以還有一種更簡單的方式,在 package.json 中配置 webpack develop server:
// Existing Code .... "scripts": { "dev": "webpack-dev-server --inline --hot --content-base ./build/" }
然后通過 npm start dev 來啟動即可。
5. 添加一個新的組件在 app 目錄中新建一個 AwesomeComponent.jsx 文件,并添加如下代碼:
import React, { Component } from "react"; class AwesomeComponent extends Component { constructor(props) { super(props); this.state = { likesCount: 0 }; this.onLike = this.onLike.bind(this); } onLike() { let newLikesCount = this.state.likesCount + 1; this.setState({ likesCount: newLikesCount }); } render() { return (Likes: {this.state.likesCount}); } } export default AwesomeComponent;
然后修改 index.jsx:
// ... import AwesomeComponent from "./AwesomeComponent.jsx"; // ... class App extends React.Component { render () { return (UPDATE 2016.10.15); } } // ...Hello React!
更新 webpack-dev-server 的配置方法
上面我們直接通過瀏覽器瀏覽的 html 文件,接下來我們需要利用 webpack-dev-server 來創建一個 HTTP Server。
首先安裝 webpack-dev-server:
$ npm i webpack-dev-server --save-dev
然后在 package.json 的 script 里面加入 build 和 dev 兩個命令:
{ "scripts": { "build": "webpack", "dev": "webpack-dev-server --devtool eval --progress --colors --hot --content-base build" } }
webpack-dev-server - 在 localhost:8080 建立一個 Web 服務器
--devtool eval - 為你的代碼創建源地址。當有任何報錯的時候可以讓你更加精確地定位到文件和行號
--progress - 顯示合并代碼進度
--colors - 命令行中顯示顏色!
--content-base build - 指向設置的輸出目錄
然后就可以使用 npm run dev 的命令來啟動項目:
$ npm run dev
在瀏覽器地址欄輸入 localhost:8080 即可看到頁面。
如果需要瀏覽器自動刷新,將 webpack.config.js 中的 entry: APP_DIR + "/index.jsx 改為下面這樣:
entry: [ "webpack-dev-server/client?http://localhost:8080", "webpack/hot/dev-server", APP_DIR + "/index.jsx" ]
這樣的話,每次當代碼發生變化之后,webpack 會自動重新打包,瀏覽器也會自動刷新頁面。
2016.11.19 更新使用 ES6 語法編寫 webpack.config.js
修改 babel-loader 加載器的配置方法:將添加 .babelrc 文件改為在 webpack.config.js 中配置
?:webpack-dev-server --inline --hot --content-base ./build/ ?? webpack-dev-server --inline --hot --content-base ./build/
接下來需要配置 babel-loader,告訴 webpack 我們使用了 ES6 和 JSX 插件。先通過touch .babelrc 創建一個名為 .babelrc 的配置文件。然后加入下面的代碼:
{ "presets" : ["es2015", "react"] }
然后再修改 webpack.config.js,使 webpack 在打包的時候,使用 babel-loader:
// Existing Code .... var config = { // Existing Code .... module: { loaders : [ { test : /.jsx?/, include : APP_DIR, loader : "babel" } ] } }
當然,命令行輸入這么長,還是不太方便,所以還有一種更簡單的方式,直接在 webpack.cofig.js 中配置 webpack develop server:
{ entry: { // ... }, // ... devServer: { hot: true, inline: true } }
Github Issue: https://github.com/nodejh/nodejh.github.io/issues/12
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91265.html
摘要:官方文檔中文翻譯構建用戶界面的庫。官方文檔建議學習時以官方文檔為準,中文翻譯或者第三方作者的教程可以幫助你理清思路會用到的重要知識點我也會進行簡明的解釋,如遇到錯誤或者不理解的內容,歡迎實時指出。 前言 前面提到前端大統一的概念,如果感興趣,歡迎說說自己的看法,點擊前往。Web前端框架層出不窮,不可能面面俱到,這里給個小建議: 如果對Weex App感興趣,應該選擇vue框架; 如果...
摘要:官方文檔中文翻譯構建用戶界面的庫。官方文檔建議學習時以官方文檔為準,中文翻譯或者第三方作者的教程可以幫助你理清思路會用到的重要知識點我也會進行簡明的解釋,如遇到錯誤或者不理解的內容,歡迎實時指出。 前言 前面提到前端大統一的概念,如果感興趣,歡迎說說自己的看法,點擊前往。Web前端框架層出不窮,不可能面面俱到,這里給個小建議: 如果對Weex App感興趣,應該選擇vue框架; 如果...
摘要:再看本篇文章之前,本人還是建議想入坑的童鞋可以選有來創建的項目,因為現在和還不成熟,坑相對要多一些,當然如果你已經做好跳坑的準備,那么請繼續往下走本文適合對有一定了解的人。 再看本篇文章之前,本人還是建議想入坑react的童鞋可以選有create-react-app來創建react的項目,因為現在dva和roadhog還不成熟,坑相對要多一些,當然如果你已經做好跳坑的準備,那么請繼續往...
摘要:前言前段時間學習完了的基礎自己網上找了一些實戰項目做了幾個感覺項目不是很全面就想做一個完整的項目來提升自己的水平以前學習的時候就看過大神的項目所以自己打算用重寫它后端數據還是用實在沒有精力擼后端感謝大神該項目是餓了么目前開發了登錄注冊購 前言 前段時間學習完了React的基礎,自己網上找了一些實戰項目,做了幾個感覺項目不是很全面,就想做一個完整的項目來提升自己的React水平.以前學習...
閱讀 1822·2021-10-09 09:44
閱讀 2695·2021-09-22 15:38
閱讀 2494·2021-09-09 09:33
閱讀 693·2021-09-07 09:58
閱讀 1824·2021-09-02 15:41
閱讀 2502·2019-08-30 15:55
閱讀 1799·2019-08-30 15:55
閱讀 542·2019-08-30 15:44