JavaScript全棧開發(fā)實(shí)戰(zhàn)
定 價(jià):98 元
- 作者:(美)亞當(dāng)·D. 斯科特(Adam D. Scott)著
- 出版時(shí)間:2020/11/1
- ISBN:9787519848866
- 出 版 社:中國(guó)電力出版社
- 中圖法分類:TP312.8JA
- 頁(yè)碼:14,352頁(yè)
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書分為25章,內(nèi)容包括:開發(fā)環(huán)境、API簡(jiǎn)介、使用Node和Express開發(fā)Web應(yīng)用、數(shù)據(jù)庫(kù)、CRUD操作、用戶賬戶和身份驗(yàn)證、用戶操作、細(xì)節(jié)優(yōu)化、用戶界面和React、裝飾應(yīng)用、Web應(yīng)用驗(yàn)證和狀態(tài)管理、部署Web應(yīng)用、部署Electron應(yīng)用、移動(dòng)應(yīng)用shell、移動(dòng)應(yīng)用身份驗(yàn)證等。
JavaScript是一門小型編程語(yǔ)言,但它能做到的事可不少。JavaScript曾經(jīng)主要用于增加Web瀏覽器窗口的交互性,現(xiàn)在已經(jīng)發(fā)展成構(gòu)建強(qiáng)大而健壯的應(yīng)用的重要工具。這是一本從實(shí)際出發(fā)的書,適合新手和有經(jīng)驗(yàn)的JavaScript開發(fā)人員閱讀,學(xué)習(xí)如何使用JavaScript語(yǔ)言創(chuàng)建API,以及Web、移動(dòng)和桌面應(yīng)用。
本書作者Adam D. Scott是一名工程主管,他將帶領(lǐng)你學(xué)習(xí)Node.js、GraphQL、React、React Native和Electron等技術(shù)。本書非常適合想要構(gòu)建全棧應(yīng)用的開發(fā)人員,以及志向高遠(yuǎn)、想自創(chuàng)公司的Web開發(fā)初學(xué)者閱讀。本書詳細(xì)說(shuō)明了如何創(chuàng)建一個(gè)能適應(yīng)各種平臺(tái)的CRUD風(fēng)格的應(yīng)用。本書主要內(nèi)容有:了解GraphQL查詢數(shù)據(jù)的簡(jiǎn)單流程。學(xué)習(xí)API、Web應(yīng)用和原生應(yīng)用驗(yàn)證身份的共同方式。使用React和Styled Components構(gòu)建高性能的Web應(yīng)用。使用React Native編寫可編譯為原生代碼的iOS和Android跨平臺(tái)應(yīng)用。學(xué)習(xí)使用Electron編寫桌面應(yīng)用。
前言
筆者開發(fā)完第一個(gè) Electron 桌面應(yīng)用后萌生了撰寫這本書的想法。使用 Web技術(shù)構(gòu)建跨平臺(tái)應(yīng)用成為可能,這讓從事 Web 開發(fā)工作的筆者深感震撼。同一時(shí)期,React、React Native 和 GraphQL 開始迅速發(fā)展。筆者四處尋找資源,想系統(tǒng)學(xué)習(xí)這些技術(shù),可是總找不到合適的。而這本書就是筆者當(dāng)時(shí)希望能讀到的指南。
本書的最終目標(biāo)是介紹如何使用一門編程語(yǔ)言(即 JavaScript)去構(gòu)建各種各樣的應(yīng)用。
目標(biāo)讀者
本書面向具有一定 HTML、CSS 和 JavaScript 經(jīng)驗(yàn)的中級(jí)開發(fā)人員,或者是希望學(xué)習(xí)開展業(yè)務(wù)或業(yè)余項(xiàng)目所需工具的初學(xué)者。
內(nèi)容編排
本書指導(dǎo)你開發(fā)一個(gè)可在不同平臺(tái)上運(yùn)行的示例應(yīng)用。整書內(nèi)容分為以下幾部分:
• 第 1 章指導(dǎo)你搭建 JavaScript 開發(fā)環(huán)境。
• 第 2~10 章介紹使用 Node、Express、MongoDB 和 Apollo Server 構(gòu)建一個(gè) API。
• 第 11~25 章說(shuō)明使用 React、Apollo 和其他工具構(gòu)建跨平臺(tái)的用戶界面。具體而言:
— 第 11 章介紹用戶界面開發(fā)和 React。
— 第12~17 章說(shuō)明如何使用 React、Apollo Client 和 CSS-in-JS 構(gòu)建 Web應(yīng)用。
— 第18~20 章指導(dǎo)你構(gòu)建簡(jiǎn)單的 Electron 應(yīng)用。
— 第21~25 章介紹使用 React Native 和 Expo 為 iOS 和 Android 構(gòu)建移動(dòng)應(yīng)用。
排版約定
本書采用下述排版約定。
斜體
表示新術(shù)語(yǔ)、URL、電子郵件地址、文件名和擴(kuò)展名。
等寬字體(Constant Width)
表示程序清單,在段落中出現(xiàn)則表示程序元素,例如變量、函數(shù)名、數(shù)據(jù)庫(kù)、數(shù)據(jù)類型、環(huán)境變量、語(yǔ)句和關(guān)鍵字。
粗體等寬字體(Constant width bold)
表示命令或者應(yīng)由用戶原樣輸入的文本。
斜體等寬字體(Constant Width Italic)
表示應(yīng)該替換成用戶提供的值,或者由上下文決定的值。
使用代碼示例
本書的補(bǔ)充材料( 代碼示例、練習(xí)題等) 可到 https://github.com/javascripteverywhere 下載。
如果你有技術(shù)問(wèn)題, 或者在使用代碼示例上有疑問(wèn), 請(qǐng)發(fā)電子郵件到bookquestions@oreilly.com。
本書是要幫你完成工作的。一般來(lái)說(shuō),如果本書提供了示例代碼,你可以把它用在你的程序或文檔中。除非你使用了很大一部分代碼,否則無(wú)需聯(lián)系我們獲得許可。比如,用本書的幾個(gè)代碼片段寫一個(gè)程序就無(wú)需獲得許可,銷售或分發(fā) O’Reilly 圖書的示例光盤則需要獲得許可;引用本書中的示例代碼回答問(wèn)題無(wú)需獲得許可,將書中大量的代碼放到你的產(chǎn)品文檔中則需要獲得許可。
我們很希望但并不強(qiáng)制要求你在引用本書內(nèi)容時(shí)加上引用說(shuō)明。引用說(shuō)明一般包括書名、作者、出版社和 ISBN。比如:“JavaScript Everywhere by Adam D. Scott (O’Reilly). Copyright 2020 Adam D. Scott, 978-1-492-04698-1”。如果你覺得自己對(duì)示例代碼的用法超出了上述許可的范圍, 請(qǐng)通過(guò)permissions@oreilly.com 與我們聯(lián)系。
O’Reilly 在線學(xué)習(xí)平臺(tái)(O’Reilly Online Learning)
近40 年來(lái),O’Reilly Media 致力于提供技術(shù)和商業(yè)
培訓(xùn)、知識(shí)和卓越見解,來(lái)幫助眾多公司取得成功。
我們擁有獨(dú)一無(wú)二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過(guò)圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。O’Reilly 的在線學(xué)習(xí)平臺(tái)允許你按需訪問(wèn)現(xiàn)場(chǎng)培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請(qǐng)?jiān)L問(wèn)http://oreilly.com。
聯(lián)系我們
請(qǐng)把對(duì)本書的評(píng)價(jià)和問(wèn)題發(fā)給出版社。
美國(guó):
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
本書的勘誤、示例和其他信息可到 https://oreil.ly/javascript-everywhere 上獲取。
對(duì)本書的評(píng)論或技術(shù)疑問(wèn),可以發(fā)電子郵件到 bookquestions@oreilly.com。
欲了解本社圖書、課程、會(huì)議和新聞等更多信息,請(qǐng)?jiān)L問(wèn)我們的網(wǎng)站 http://www.oreilly.com。
我們的 Facebook:http://facebook.com/oreilly。
我們的 Twitter:http://twitter.com/oreillymedia。
我們的 YouTube:http://www.youtube.com/oreillymedia。
致謝
感謝 O’Reilly 公司過(guò)去和現(xiàn)在所有優(yōu)秀的人,他們多年來(lái)一直歡迎我說(shuō)出自己的想法,對(duì)不同的觀點(diǎn)包容開放。我要特別感謝編輯 Angela Rufino,她給我反饋、鼓勵(lì)和許多善意的提醒。我還要感謝 Mike Loukides,他為我提供了咖啡因,與我促膝長(zhǎng)談。最后,感謝 Jennifer Pollock 的支持和鼓勵(lì)。
由衷感謝開源社區(qū),我學(xué)到了很多東西并從中受益。如果沒有創(chuàng)建和維護(hù)眾多庫(kù)的個(gè)人和組織,這本書是不可能問(wèn)世的。
得益于幾位技術(shù)審校的幫助,這本書才能以更好的面貌呈現(xiàn)在你面前,才能保證內(nèi)容準(zhǔn)確無(wú)誤。感謝 Andy Ngom、Brian Sletten、Maximiliano Firtman和 Zeeshan Chawdhary。這次代碼審查任務(wù)非常繁重,衷心感謝他們所做的努力。特別感謝我的老同事兼朋友 Jimmy Wilson,我在本書付梓之前最后一刻打電話給他,讓他再審查一遍,給我提供反饋。這是很高的要求,但就像他所做的每一件事一樣,他滿懷熱情地應(yīng)允了。沒有他的幫助,這本書不可能像現(xiàn)在這么好。
成年后,我非常幸運(yùn),與一群聰明、熱情、支持我的同事相處。我和他們?cè)谝黄鸬臅r(shí)間里學(xué)到了很多大大小小的經(jīng)驗(yàn),有技術(shù)方面的,也有非技術(shù)方面的。人員太多,無(wú)法一一列出,這里特別向 Elizabeth Bond、John Paul Doguin、Marc Esher、Jenn Lassiter 和 Jessica Schafer 表示敬意。
寫作時(shí),音樂一直陪伴著我,沒有 Chuck Johnson、Mary Lattimore、Makaya McCraven、G.S.Schray、Sam Wilkes、Hiroshi Yoshimura 等人的美妙聲線,我不可能寫出這本書。
最后,感謝我的妻子 Abbey,感謝我的孩子 Riley、Harrison 和 Harlow,為了寫這本書,我犧牲了很多陪伴他們的時(shí)間。 謝謝你們?cè)谖疑罹愚k公室奮筆疾書時(shí)體諒我,有時(shí)我身不在但心在。你們四個(gè)是我做每件事的動(dòng)力。
Adam D. Scott生活在美國(guó)康涅狄格州,是一名工程經(jīng)理、Web開發(fā)者和教育工作者。他目前在美國(guó)消費(fèi)者金融保護(hù)局擔(dān)任Web開發(fā)主管,與才華橫溢的團(tuán)隊(duì)一起專注于構(gòu)建開源Web應(yīng)用。他從事教育工作已經(jīng)十多年,經(jīng)歷了很多技術(shù)變革。他教授和編寫了一系列技術(shù)課程。
目錄
序 .1
前言 .3
第 1 章 開發(fā)環(huán)境 9
1.1 文本編輯器 . 10
1.2 終端 10
1.2.1 使用專門的終端應(yīng)用 10
1.2.2 使用 VSCode 11
1.2.3 在文件系統(tǒng)中變換位置 11
1.3 命令行工具和Homebrew(僅適用Mac 用戶) 12
1.4 Node.js 和 NPM 12
1.4.1 在 macOS 中安裝 Node.js 和 NPM 13
1.4.2 在 Windows 中安裝 Node.js 和 NPM 13
1.5 MongoDB 14
1.5.1 在 macOS 中安裝和運(yùn)行 MongoDB . 14
1.5.2 在 Windows 中安裝和運(yùn)行 MongoDB . 15
1.6 Git 16
1.7 Expo 16
1.8 Prettier 17
1.9 ESLint 17
1.10 美化 . 18
1.11 小結(jié) . 18
第 2 章 API 簡(jiǎn)介 19
2.1 構(gòu)建什么 19
2.2 如何構(gòu)建 20
2.3 開始動(dòng)手 21
2.4 小結(jié) 22
第 3 章 使用Node 和Express 開發(fā)Web 應(yīng)用 23
3.1 Hello World . 23
3.2 Nodemon 24
3.3 擴(kuò)展端口選項(xiàng) 26
3.4 小結(jié) 27
第 4 章 首個(gè) GraphQL API 28
4.1 把服務(wù)器(初步)改造成 API 28
4.2 GraphQL 基礎(chǔ)知識(shí) . 33
4.2.1 模式 33
4.2.2 解析器 . 34
4.3 改造 API 35
4.4 小結(jié) 43
第 5 章 數(shù)據(jù)庫(kù) 44
5.1 MongoDB 入門 . 45
5.2 在應(yīng)用中連接 MongoDB . 47
5.3 在應(yīng)用中讀寫數(shù)據(jù) 51
5.4 小結(jié) 59
第 6 章 CRUD 操作 60
6.1 分離 GraphQL 模式和解析器 60
6.2 編寫 GraphQL CRUD 模式 . 64
6.3 CRUD 解析器 65
6.4 日期和時(shí)間 . 67
6.5 小結(jié) 70
第 7 章 用戶賬戶和身份驗(yàn)證 71
7.1 應(yīng)用身份驗(yàn)證流程 71
7.2 加密和令牌 . 73
7.2.1 加密密碼. 73
7.2.2 JSON Web Tokens 74
7.3 在 API 中集成身份驗(yàn)證功能 . 75
7.3.1 User 模式 76
7.3.2 身份驗(yàn)證解析器 . 78
7.4 把用戶添加到解析器上下文中 . 82
7.5 小結(jié) 85
第 8 章 用戶操作 .86
8.1 準(zhǔn)備工作 86
8.2 新建筆記時(shí)指定用戶 . 87
8.3 用戶的更新和刪除權(quán)限 89
8.4 用戶查詢 91
8.5 收藏筆記 94
8.6 嵌套查詢 99
8.7 小結(jié) . 102
第 9 章 細(xì)節(jié)優(yōu)化 103
9.1 Web 應(yīng)用和 Express.js 最佳實(shí)踐 103
9.1.1 Express Helmet . 103
9.1.2 跨域資源共享 104
9.2 分頁(yè) . 105
9.3 數(shù)據(jù)限制 107
9.4 其他事項(xiàng) 109
9.4.1 測(cè)試 109
9.4.2 訂閱 109
9.4.3 Apollo GraphQL Platform 109
9.5 小結(jié) . 110
第 10 章 部署 API . 111
10.1 托管數(shù)據(jù)庫(kù) 112
10.2 部署應(yīng)用 . 118
10.2.1 項(xiàng)目設(shè)置 118
10.2.2 部署 . 120
10.2.3 測(cè)試 . 120
10.3 小結(jié) 121
第 11 章 用戶界面和 React 122
11.1 JavaScript 和 UI 123
11.2 JavaScript 聲明式界面 . 124
11.3 React 入門 124
11.4 小結(jié) 130
第 12 章 使用React 構(gòu)建Web 客戶端 . 131
12.1 構(gòu)建什么 . 131
12.2 如何構(gòu)建 . 132
12.3 開始動(dòng)手 . 133
12.4 構(gòu)建 Web 應(yīng)用 . 134
12.5 路由 136
12.6 UI 組件 141
12.7 小結(jié) 144
第 13 章 裝飾應(yīng)用 145
13.1 創(chuàng)建布局組件 145
13.2 CSS 148
13.2.1 CSS-in-JS 149
13.2.2 創(chuàng)建一個(gè)按鈕組件 150
13.2.3 添加全局樣式 . 152
13.2.4 組件樣式 154
13.3 小結(jié) 158
第 14 章 使用 Apollo Client 159
14.1 設(shè)置 Apollo Client . 160
14.2 查詢 API . 162
14.3 動(dòng)態(tài)查詢 . 173
14.4 分頁(yè) 177
14.5 小結(jié) 179
第 15 章 Web 身份驗(yàn)證和狀態(tài)管理 180
15.1 創(chuàng)建注冊(cè)表單 180
15.1.1 React 表單和狀態(tài) . 184
15.1.2 signUp 變更操作 186
15.1.3 JSON Web Token 和本地存儲(chǔ)器 189
15.2 重定向 . 190
15.3 為請(qǐng)求附加首部 190
15.4 本地狀態(tài)管理 191
15.5 退出 195
15.6 創(chuàng)建登錄表單 198
15.7 受保護(hù)的路由 203
15.8 小結(jié) 205
第 16 章 創(chuàng)建、讀取、更新和刪除操作 207
16.1 新建筆記 . 207
16.2 讀取用戶的筆記 214
16.3 更新筆記 . 218
16.4 刪除筆記 . 226
16.5 收藏筆記 . 228
16.6 小結(jié) 232
第 17 章 部署Web 應(yīng)用 . 233
17.1 靜態(tài)網(wǎng)站 . 233
17.2 我們的部署流水線 . 235
17.2.1 使用 Git 托管源碼 235
17.2.2 使用 Netlify 部署 237
17.3 小結(jié) 239
第 18 章 使用Electron 開發(fā)桌面應(yīng)用 240
18.1 構(gòu)建什么 . 240
18.2 如何構(gòu)建 . 241
18.3 開始動(dòng)手 . 241
18.4 首個(gè) Electron 應(yīng)用 . 242
18.5 特別處理 macOS 應(yīng)用窗口 244
18.6 開發(fā)者工具 245
18.7 Electron API 246
18.8 小結(jié) 247
第 19 章 使用Electron 集成現(xiàn)有的Web 應(yīng)用 248
19.1 集成 Web 應(yīng)用 . 248
19.2 配置 251
19.3 內(nèi)容安全策略 252
19.4 小結(jié) 255
第 20 章 部署Electron 應(yīng)用 . 256
20.1 Electron Builder 256
20.2 針對(duì)當(dāng)前平臺(tái)構(gòu)建 . 258
20.3 應(yīng)用圖標(biāo) . 259
20.4 針對(duì)多個(gè)平臺(tái)構(gòu)建 . 260
20.5 代碼簽名 . 260
20.6 小結(jié) 261
第 21 章 使用React Native 開發(fā)移動(dòng)應(yīng)用 . 262
21.1 構(gòu)建什么 . 263
21.2 如何構(gòu)建 . 263
21.3 開始動(dòng)手 . 264
21.4 小結(jié) 268
第 22 章 移動(dòng)應(yīng)用shell . 269
22.1 React Native 構(gòu)件 269
22.2 樣式和 Styled Components 271
22.3 路由 275
22.3.1 使用 React Navigation 實(shí)現(xiàn)標(biāo)簽頁(yè)路由 276
22.3.2 堆疊導(dǎo)航 279
22.3.3 添加界面標(biāo)題 . 284
22.4 圖標(biāo) 285
22.5 小結(jié) 287
第 23 章 GraphQL 和React Native 288
23.1 創(chuàng)建列表和滾動(dòng)內(nèi)容視圖 289
23.2 使用 Apollo Client 操作 GraphQL . 297
23.3 添加加載中指示符 . 304
23.4 小結(jié) 306
第 24 章 移動(dòng)應(yīng)用身份驗(yàn)證 307
24.1 身份驗(yàn)證路由流程 . 307
24.2 創(chuàng)建登錄表單 317
24.3 通過(guò) GraphQL 變更操作驗(yàn)證身份 . 322
24.4 帶身份驗(yàn)證信息的 GraphQL 查詢 . 324
24.5 添加注冊(cè)表單 329
24.6 小結(jié) 335
第 25 章 分發(fā)移動(dòng)應(yīng)用 337
25.1 配置 app.json 337
25.2 圖標(biāo)和應(yīng)用加載界面 340
25.2.1 應(yīng)用圖標(biāo) 340
25.2.2 啟動(dòng)畫面 341
25.3 發(fā)布到 Expo 中 342
25.4 創(chuàng)建原生構(gòu)建包 343
25.4.1 iOS 344
25.4.2 Android 345
25.5 分發(fā)到應(yīng)用商店中 . 346
25.6 小結(jié) 346
后記 347
附錄A 在本地運(yùn)行 API 349
附錄B 在本地運(yùn)行Web 應(yīng)用 . 351
作者介紹 353
封面介紹 353