關於 React、TypeScript 的介紹和其在前端的重要地位,想必你們都很清楚吧,在這裏筆者就不介紹了。你也許會問爲何要基於 TypeScript3 構建 React ?不一樣的人也許有不一樣的答案,因爲 TypeScript3 和 React 分別來自微軟和Facebook,其江湖地位的顯赫不言而喻,前端的三大框架,Angular 在2.O版本就已經開始擁抱 TypeScript,當時筆者就是由於這個緣由放棄 Angular 的,由於還得學一門新東西,想一想就後悔。可是今時不一樣往日,React和vue都在積極的跟進選用和 TypeScript 進行整合,這是將來前端框架的趨勢不可逆轉,這可不是學不學的問題,不學 TypeScript,將來有可能就用不上最新的版本。html
React的強大靈活些再結合TypeScript帶來了可選的靜態類型檢查以及最新的ECMAScript特性,讓咱們能以相似Java這樣工程化的思惟構建咱們的項目,讓咱們的代碼更易閱讀和易於團隊開發與維護。前端
本系列文章,是筆者讀《React with TypeScript 3》這本書的讀書筆記,這本書的發行日期爲2018年11月份,此筆記內容並非徹底照搬書的內容進行翻譯,是結合筆者思考和練習實踐整合的內容。筆者也是初學者,在這裏與你們一塊兒分享共同窗習,因爲做者寫此書時,使用到的相關框架版本和依賴項目版本如今有所變化,本書的例子筆者都會親自實踐,替你們提早採坑,確保能正常運行。因爲筆者英語水平有限,理解不免有所誤差,如你發現問題歡迎你們關注「前端達人」公衆號留言指正,我們一塊兒共同進步。vue
爲了表示對做者勞動的尊重,我就不在這裏分享電子書了,感興趣的能夠能夠到packtpub官網購買(packtpub.com)。node
在學習以前,咱們先了解下本書的做者:Carl Rippon。Carl Rippon 從事軟件行業已超過20年,在各個領域開發了一系列複雜的業務應用程序。過去八年來,他一直使用各類 JavaScript 技術構建單頁應用程序,包括 Angular,ReactJS 和 TypeScript。 Carl 一共發表了100多篇關於前端技術的博客文章。react
因爲本書在一開始花了很多的篇幅介紹 TypeScript ,爲了讓你們快速接觸基於 TypeScript3 的 React 項目筆者就不在這系列裏進行介紹 TypeScript3 了,若是你認爲有必要介紹,歡迎你們在留言區留言,若是留言人數多的話,我會專門開設個 TypeScript 3 專題進行專門介紹。webpack
本系列目錄結構暫定以下,在筆者讀的過程當中,爲了讓你們更全面的理解本系列專題,可能會進行補充和調整,並非徹底基於書的結構。git
爲了有更好的閱讀體驗,你至少具有基礎的JS、CSS基礎知識,掌握了一些 ES6+語法和 TypeScript 的基礎知識。es6
運行本系列示例你至少安裝了node環境,npm版本至少爲 5.2,有一款你熟悉的編輯器,推薦你使用 Visual Studio Code 。( 須要 TSLint 擴展和 Prettier 擴展。)github
本系列筆者運行環境: npm 6.9.0;node v10.16.3web
筆者將介紹兩種方式進行構建 React TS3 ( TypeScript3 簡稱,後面的內容都會以簡稱出現),分別爲使用 create-react-app 進行快速構建 和 手工方式構建。
使用如下命令進行全局安裝:
npm install -g create-react-app複製代碼
npx create-react-app my-react-ts-app --typescript複製代碼
npm install react@16.7.0-alpha.0
npm install react-dom@16.7.0-alpha.0複製代碼
cd my-react-ts-app
npm install tslint tslint-react tslint-config-prettier --save-dev複製代碼
爲了方便開發,咱們在Visual Studio Code 編輯器裏安裝擴展(Ctrl + Shift + X),在左上角的搜索框中輸入tslint
touch tslint.json複製代碼
{
"extends": [
"tslint:recommended",
"tslint-react",
"tslint-config - prettier "
],
"rules": {
"ordered-imports": false,
"object-literal-sort-keys": false,
"no-debugger": false,
"no-console": false,
},
"linterOptions": {
"exclude": [
"config/**/*.js",
"node_modules/**/*.ts",
"coverage/lcov-report/*.js"
]
}
}複製代碼
上述配置規則容許咱們開發時使用 debugger 和 console,而且容許imports的導入和對象key的聲明能夠不按照字母的順序進行排序。規則的設置介紹就不在這裏詳細介紹了,感興趣的能夠到官網進行詳細閱讀( palantir.github.io/tslint/rule… )。
<a className="App-link" href="https://reactjs.org" target="_blank" rel="noopener noreferrer" >
Learn React and TypeScript
</a>複製代碼
修改完後,咱們進行保存。
若是你能按照上述順序執行,輸入如下命令,不出意外你就能成功運行咱們的的項目了
npm start複製代碼
手動建立步驟比較繁雜,可是可以從0~1的那種體驗,仍是蠻有成就感的。
首先咱們手動建立一個文件夾manually,而後在manually下建立src源文件文件夾和發佈環境用的dist文件夾
mkdir manually
cd manually
mkdir src
mkdir dist複製代碼
該 package.json 文件定義了咱們的項目名稱,描述,構建命令,依賴的 npm 模塊等等。
打開終端輸入如下命令:
mkdir manually
npm init複製代碼
而後按照提示輸入項目的相關信息,而後就會在項目根目錄裏自動建立一個 package.json 文件
咱們能夠經過如下命令,在本地項目進行安裝:
npm install typescript --save-dev複製代碼
tsconfig.json 配置了 TS3 如何編譯以及相關的基本規則,配置以下:
{
"compilerOptions": {
"target": "es5",
"module": "es6",
"moduleResolution": "node",
"lib": ["es6", "dom"],
"sourceMap": true,
"jsx": "react",
"strict": true,
"noImplicitReturns": true,
"rootDir": "src",
"outDir": "dist",
},
"include": ["**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}複製代碼
在本地項目下安裝TSLint,命令以下:
npm install tslint tslint-react tslint-config-prettier --save-dev複製代碼
經過如下命令建立tslint.json文件,並在文件裏輸入以配置內容:
touch tslint.json複製代碼
{
"extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"],
"linterOptions": {
"exclude": ["node_modules/**/*.ts"]
}
}
複製代碼
經過如下命令將React安裝到咱們的項目裏:
npm install react react-dom複製代碼
npm install @types/react @types/react-dom --save-dev複製代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<div id="root"></div>
<script src="bundle.js"></script>
</body>
</html>複製代碼
咱們React應用程序中的內容將會注入到id=root的div中,全部的JS內容都會編譯成一個bundle.js,存在dist文件夾中。
咱們在src目錄裏建立一個 index.tsx 文件,聲明瞭一個函數組件,代碼以下:
import * as React from "react";
import * as ReactDOM from "react-dom";
const App: React.FC = () => {
return <h1>My React App!</h1>;
};
ReactDOM.render(<App />, document.getElementById("root"));
複製代碼
接下來咱們使用 webpack 打包咱們的項目,webpack 是什麼我就不介紹了,不明白的去 webpack官網看介紹。
npm install webpack webpack-cli --save-dev複製代碼
npm install webpack webpack-dev-server --save-dev複製代碼
ts-loader 幫助咱們加載 TypeScript 相關代碼,命令以下:
npm install ts-loader --save-dev複製代碼
接下來,咱們在項目根目錄建立 webpack.config.js 文件,配置文件內容以下:
const path = require("path");
module.exports = {
entry: "./src/index.tsx",
mode: "development",
module: {
rules: [{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/}]},
resolve: {
extensions: [".tsx", ".ts", ".js"]},
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js"},
devServer: {
contentBase: path.join(__dirname, "dist"),
compress: true,
port: 9000}
};
複製代碼
若是你順利的到了這一步,你的項目文件夾應該是這樣的:
接下來咱們使用npm命令啓動咱們的應用程序,一個用於開發模式,一個用於生產打包模式,你能夠修改 package.json 中 scripts 屬性對應的內容部分,示例以下:
{
...
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack-dev-server --env development",
"build": "webpack --env production"
},
...
}複製代碼
把代碼部署到生成環境裏,咱們就會運行以下命令,你就會發現 dist 文件夾裏,多出來了一個 bundle.js 文件:
npm run build複製代碼
bundle.js 會將用到的依賴項和咱們的 react 組件代碼都編譯壓縮成一個文件。
接下來咱們輸入如下命令,在開發模式下進行預覽:
npm start複製代碼
接下來咱們在瀏覽器裏進行訪問,在瀏覽器輸入 http://localhost:9000/,不出意外會看到以下效果:
接下來在應用程序仍然在運行的狀況下,修改 index.tsx 文件的內容:
const App: React.FC = () => {
return <h1>My React and TypeScript App!</h1>;
};
複製代碼
保存後,咱們會看到瀏覽器會自動刷新顯示咱們更新的內容:
今天的內容就到這裏,咱們學習瞭如何使用 create-react-app 和 手工的兩種方式建立 React TypeScript3項目。下一篇文章小編將繼續給你們分享如何建立組件的主題,敬請期待...
更多精彩內容,請微信關注「前端達人」公衆號!