TML 教程導讀- (HTML5 標準):
HTML也叫作超文本標記語言,標準通用標記語言下的一個應用,您可以使用 HTML 來建立自己的 WEB 站點。通過學習本教程,您將可以使用 HTML 來創(chuàng)建站點。HTML 是非常容易學習的!相信您能很快學會它!
HTML發(fā)展史:
HTML沒有1.0,因為關于它的初版存在爭議,1995年HTML 2.0面世,1997年由國際官方組織W3C推出了HTML 3.2以及HTML 4.0標準,后面W3C(萬維網聯(lián)盟)也漸漸變成Web技術領域的權威,經過漫長的演變,2014年,HTML 5標準最終面世。
HTML 2.0——1995年11月,RFC 1866發(fā)布
HTML 3.2——1997年1月14日,W3C發(fā)布推薦標準
HTML 4.0——1997年12月18日,W3C發(fā)布推薦標準
HTML 4.01——1999年12月24日,W3C發(fā)布推薦標準
HTML 5——2014年10月28日,W3C發(fā)布推薦標準
HTML 實例:
在本教程中的每個章節(jié)中都會提供一定量的實例,使用編輯器,運行并修改這些實例,您可以深入掌握 HTML!
實例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test00-html課程導讀實例</title>
</head>
<body>
<h1>這是一個標題</h1>
<p>這是一個段落。</p>
</body>
</html>
使用HBuilderX創(chuàng)建一個項目:
我是一名前端開發(fā)程序員,自己整理了一份2019最全面前端學習資料,從最基礎的HTML+CSS+JS到移動端HTML5到各種框架都有整理,送給每一位前端小伙伴,這里是小白聚集地,歡迎初學和進階中的小伙伴
前端資料獲取方式:
1.在你手機的右上角有【關注】選項,點擊關注!
2.關注后,手機客戶端點擊我的主頁面,右上角有私信,請私信回復:【學習】
電腦已經設置好了關鍵詞自動回復,所以回復的時候請注意關鍵詞喲~
程語言正在不斷演化,但預測 5 年后會如何則很有難度,作者給出了一個答案。
作者 | Timothy Mugayi
譯者 | 明明如月,責編 | 唐小引
封圖 | CSDN 付費下載自 VCG
出品 | CSDN(ID:CSDNnews)
在這篇文章中,我們將看到一個我自己手動排行的編程語言和框架的列表,我相信這些語言和框架在未來 5 到 10 年內仍然堅挺。我不希望這個編程語言列表帶有太多偏見。確定這個名單非常困難,因為每個人都會有些許偏見。當我草草記下我的想法時,我在思考隨著時間推移編程的范式和創(chuàng)新是否符合演變。2020 年后,更快,更易用,更實用,更抽象的抽象技術變得流行。在此精選列表是基于我對技術的趨勢、工作機會、使用情況、范例、基于流行性的統(tǒng)計以及未來的技術創(chuàng)新來預測的。
在科技界一年就像一生,因此在未來 5 年內可能會發(fā)生很多變化,但我相信這份精心策劃的清單仍然很重要。如果您剛開始學習如何編程,不知道該選擇哪種語言或框架,那么這份精選清單則可以幫到你。
回顧
當我們踏入 2020 年,回顧過去 5 年,很多事情都發(fā)生了改變。如區(qū)塊鏈、深度學習、量子計算等新技術開始出現。對于那些剛剛開始學習編程甚至是經驗豐富的開發(fā)人員來說,為了在這個不斷變化的領域中保持與時俱進,思考自己在目前的發(fā)展狀況大有裨益。現在就是學習新技術的最好時機。
為什么確保你選擇和學習正確的語言或框架很重要?
學習一門新的語言和框架對你來說是一種投資,你花的金錢和時間有去無回。 技術總是在不斷變化,隨著年齡的增長,保持與時俱進的需求變得越來越重要。選擇正確的語言和框架可能會改變你的一生,可能會徹底改變你做工作的方式和發(fā)展軌跡。因此你肯定想選擇一個近幾年不會過時的編程語言。
Rust
Rust 是一種系統(tǒng)編程語言,旨在取代 C 和 C++ 開發(fā)。Rust 提供了和 C 和 C++ 匹敵的性能,但是使用起來更加友好。對于那些已經在 c / C++ 中編寫了很長時間的程序的人來說,他們非常喜歡聽到這樣的話。
已經有相當多的新開發(fā)者涉足這個領域。Rust 擁有不斷增長的用戶群。有數百家公司使用 Rust 進行開發(fā),比如 Dropbox、 Yelp 和 Cloudflare。亞馬遜最近宣布的虛擬化技術 Firecracker 這種產品也使用的是 Rust 的。在 StackOverflow 的 2016 年開發(fā)者調查中,Rust 也被評為“最受歡迎”的技術 (這意味著更多的用戶會堅持使用 Rust)。
盡管與那些已經問世幾十年的其他編程語言相比,它還是相對比較年輕,但它擁有大量可用的庫,可以用來加速開發(fā)。你可以在 crates.io 或 GitHub 上找到你需要大多數的東西。
Rust 的主要特征
Rust 的主要特征是運行速度快和內存利用率高。它沒有運行時或垃圾收集器,它適合用在對性能要求高的關鍵的服務,它可以在嵌入式設備上運行,并且很容易與其他語言集成。在接下來的 5 年和 10 年里,隨著我們遇到硬件編程語言的限制,這些語言的速度更快,占用的內存更少,提高了速度和響應能力,使我們能夠更省力的編寫代碼,這類語言將變得更加重要。
可靠性:Rust 豐富的類型系統(tǒng)和所有權模型保證了內存和線程的安全,并能夠在編譯時消除許多錯誤。
生產力:Rust 有很好的文檔,提供了一個非常友好的編譯器,錯誤信息提示非常友好。C,C++ 代碼的編譯器提示消息則是出了名的難以理解。Rust 的編譯器則更好。如果你想學習系統(tǒng)編程,使用“ rustc”編譯器做可以讓你不用擔心內存安全而能夠專注其他的事情。
正如一位著名的程序員曾經說過:Pascal 就像穿著緊身衣,C 就像在玩刀,而 C++ 就像在玩弄燃燒的電鋸。在這個比喻中,Rust 就像是穿著保護裝備懸掛在繩子上做跑酷運動。是的,這看起來有點可笑,但是你可以用它做各種很酷的動作而不傷害自己。
Python
在過去的幾年里,Python 的流行度一直在穩(wěn)步上升,尤其是在過去的 10 年里,最終邁進了 TIOBE 指數的前 5 名。
Python 非常實用。對于初學者來說,它是一個腳本語言,這意味著入門非常快,不像 java 還需要編譯。它的本質是面向對象的語言。在大學的許多學術課程中,Python 已經取代 Java 成為默認的首選編程語言。對于初學者來說,安裝 Python 解釋器并運行非常容易。
$ print (‘hello world this is my. First program’)
如上述代碼所示,你的第一個程序就這樣用 Python 寫完了。
Python 正在為未來鋪平道路。它在未來 5 年乃至更長的時間段內都將具有較大影響力。Python 已經讓機器學習、深度學習、人工智能、大數據等所有流行的數據科學流行語等新的技術范式成為可能。互聯(lián)網上有大量成熟的庫,如 TensorFlow、 Scikit-Learn、 Dask for distributed Data Science 大規(guī)模可擴展計算, Python 也可以用于量子計算。雖然我們離量子計算還相對較遠,但是 Python 是一個可以確保你作為一個量子程序員的地位的語言。
Python 在企業(yè)和初創(chuàng)企業(yè)中都很受歡迎。在過去 5 年中已經取得了巨大的進展。現在一些使用廣泛的平臺,比如 Reddit和許多 Google 庫都是建立在 python 之上的。
我個人使用 Python 編寫腳本并快速自動化許多任務。它一直是一種讓自由職業(yè)者快速完成項目的不可多得的語言。
Python 提供了可以訪問網絡框架,比如 Django 框架,它是構建前端和后端網絡應用的最好的 Python 框架之一。堅持 DRY 原則快速構建應用程序的哲學,需要很少的代碼量和需要很少的編程經驗。
Ruby
Ruby 是另一個功能強大的高級語言,它可以讓你輕松地構建應用程序。作為面向對象程序設計語言,對于那些有 Python 開發(fā)經驗的人來說,Ruby 語法看起來與 Python 非常相似。該語言還配備了構建復雜應用程序所需的所有工具。
許多硅谷的初創(chuàng)公司都是建立在 Ruby 之上的,比如 Airbnb、 Twitch、 GitHub 和 Twitter。Ruby on Rails 是一個運行 Ruby 的全堆棧 Web 應用程序框架,這讓 Ruby 更加流行。
Ruby 的一些關鍵特性:
提供了一個健壯的高質量庫。
語法簡單,有助于快速開發(fā)原型。
學習門檻低,新程序員很容易上手。
是一種面向對象程序設計語言,所以你可以擁有一切面向對象語言的優(yōu)勢。
由于 Rust 的內存占用很小,可用于構建分布式在線服務或網絡服務。
Golang
Go(Golang)是 Google 開發(fā)的一種相對較新的編程語言。它最近越來越受歡迎。 提供了極好的多線程支持,因此,許多嚴重依賴分布式系統(tǒng)的公司都正在使用它。它是為解決谷歌面臨的一些棘手問題而設計的。谷歌還將 Go 作為新項目的主要語言,并用 Go 取代其他語言。因為谷歌與我們的日常生活息息相關,所以我們不可能忽視它,認為它在可預見的未來將繼續(xù)保持活躍。
我必須承認,它是一門非常優(yōu)雅的編程語言,語法很簡潔。它在動態(tài)類型語言、解釋性語言的易用性和類型安全、內存安全之間取得了平衡。
主要功能:
由于有內在并發(fā)支持,它可以有效提高 CPU 利用率。擅長云系統(tǒng)開發(fā),分布式系統(tǒng),微服務。
輕量級、執(zhí)行速度快和開發(fā)效率高。
內存占用和二進制文件較小。
自動垃圾收集。
無異常,它自己處理錯誤, 等。是的,你沒看錯。這對你來說意味著什么?您必須準確地知道如何自己處理這些錯誤,而不是拋出一堆 try-catch 異常。仔細想想是不是這樣?
有趣的事實:
全球 Go 語言開發(fā)人員平均年薪: 109,483 美元。在美國,這種頂級編程語言的平均年薪為13.6 萬美元。
在 2019 年 Stack Overflow 開發(fā)者調查中,Go 是全球排名第三的高薪語言。
GitHub 上第四活躍的編程語言。
GraphQL
與今天相比,以前的 Web API 設計相對簡單,有用于從服務器檢索數據的 REST 表示狀態(tài)轉移標準,該標準是基于URL來訪問數據的。
然而,需求增長超過了標準。數據不再是之前靜態(tài)的樣子了,它更加動態(tài),因此 GraphQL 應運而生。GraphQL 是 REST 架構的替代方案,旨在克服REST的缺點。與 REST 不同,GraphQL 允許脫離固定數據結構方式來請求客戶機需要的特定數據。在后端,GraphQL 向 API 指定如何向客戶端顯示數據。GraphQL 通過 API 重新定義了開發(fā)人員的工作,這些 API 為市場提供了更多的靈活性和速度;它改善了客戶機與服務器之間的交互,使前者能夠進行精確的數據請求,準確的獲得他們所需要的東西。
最初由 Facebook 在 2012 年創(chuàng)建,GraphQL 內部用在他們的移動應用程序,通過其特定的數據獲取功能來減少網絡使用。從那時起,GraphQL 規(guī)范開源了。現在主要的編程語言如 Python,Java,c # ,Node.js 等都支持它。
由于其生態(tài)系統(tǒng)的快速擴張,這使得它成為在可預見的未來繼續(xù)堅挺的技術之一。它有豐富的擴展庫和功能強大的工具,如 Apollo、 GraphiQL 和 GraphQL Explorer。
GraphQL 的一些關鍵特性:
查詢速度更快,選擇查詢的字段減少請求。
非常適合復雜系統(tǒng)和微服務。通過其 API 集成多個系統(tǒng)。
GraphQL 可以將來自多個地方的數據聚合成單個 API。
不存在過多或過少抓取的問題。眾所周知,REST 響應要么包含過多的數據,要么包含的數據不夠。
驗證和開箱即用的類型檢查。
自動生成 API 文檔可取代 Swagger,并且在 GitHub 問題中可以找到使用規(guī)范。
無版本的 API 演進,這是 REST 的一個常見問題隨著 API 演進,你不得不創(chuàng)建一個新的 API 或者在 URL 前面加上版本,并且有無可挑剔的文檔。通過使用 GraphQL,你可以得到一個單一的、不斷發(fā)展的版本,這使你的應用程序可以不斷地訪問新特性,并且鼓勵編寫更簡潔、更易維護的服務器代碼。
GraphQL 并不是試圖取代 REST,它們是解決不同類型問題的兩個不同的東西。隨著我們邁向大數據,投入一些時間學習 Graphql 就非常有必要。
Angular
Angular 由 Google 開發(fā)的,一種用于軟件開發(fā)的成熟的 TypeScript 框架。它是構建 web 和移動應用程序的主要開源框架之一。Angular 是一個完全基于 AngularJS 改寫的。從 AngularJS 開始,它在剛開始的時候就具有一定的影響力,現在 Angular 經過多年的發(fā)展,它已經發(fā)展成為一個全面的開發(fā)框架,其中包括了構建網絡和移動應用所需的所有工具和組件。這個框架的美妙之處在于它遵循著一個清晰的路線圖,每六個月發(fā)布一個新的 Angular 主版本,如果你想長期使用 Angular 的話,這點很重要。
Angular 的主要特征:
下面只討論 Angular 9 中提到的特性,這些特性可能會解決性能問題。
Google 為這個框架提供了長期的支持,并不斷地改進它。定期改進非常受追捧,這表明這個框架有一個充滿活力。因此,鑒于谷歌正在支持它并對其進行投資,表明該框架在可預見的未來仍將具有相關性。
Angular 9 的另一個關鍵特性是通過 Ivy Compiler 減少了大包文件,從而占用了很小的空間 —— 試圖通過減少 JavaScript 包的大小,Ivy 加快應用程序啟動。
為需要支持多種語言的應用程序提供更好的國際化支持。
JavaScript
我斗膽說一句:JavaScript 是一個不可替代的語言,毫無疑問它將在未來的幾年里繼續(xù)存在。因此,投資學習這門語言非常劃算。它不僅僅是一個客戶端的開發(fā)腳本語言,通過像 Node JS,Angular 和 React 這樣的框架和庫,你還可以在服務器端使用 JavaScript 來開發(fā)用戶界面。
JavaScript 是所有大型科技公司的核心,比如 Netflix,Facebook,Google 等等。因此,JavaScript 作為一種語言和其他編程語言一樣都具有合法地位。2020 年是開始投資的一年。把你的空閑時間投入到學習 JavaScript 上來吧。
現在想一想,幾乎所有的網站都在某種程度上使用了 JavaScript。
榮譽獎
Webassembly ( 縮寫為 Wasm) 應該獲取榮譽獎,但不能成為前 7 名,因為它既不是框架也不是編程語言。
Wasm 被設計為編程語言的編譯目標和二進制格式,其目標是為 web 應用程序提供接近本機的性能。這意味著什么?把它想象成一個公共的中央平臺,開發(fā)人員可以將各種編程語言編譯成 web 匯編,然后在這個平臺上運行它們。另一個類比是它是所有編程語言的 Java 虛擬機。
從本質上講,每當您在 Internet上通過 Web 瀏覽器運行應用程序時,Wasm 都將目標定為 Web 應用程序的近乎本機的性能,在接下來的 5 年中,大多數情況都需要用到 Wasm。想想那些需要完美表現的網絡游戲吧。通過點擊一個按鈕,你就可以從服務器下載應用程序代碼,并將其加載到運行 Wasm 的瀏覽器虛擬機中。Wasm 得到了如 Mozilla,微軟,谷歌和蘋果等大企業(yè)的支持。
這種 Web 匯編的廣泛應用鼓勵去中心化計算,例如 Ethereum 正在著手開發(fā) ether 2.0,在本文撰寫之時,Ethereum 將利用其新提出的重新設計智能合同執(zhí)行層的建議,使用 WebAssembly 的確定性子集。在這個巨大的數字化空間里,學習模型正逐漸成為軟件開發(fā)人員構建、人與應用交互的技術支柱。
Web 匯編可以讓 JavaScript 做它擅長的事情,并將它不能做的部分委托給其他語言。可以把它想象成下一代 Web Ajax。Ajax 使客戶端應用程序成為可能。Web 匯編允許您超越僅僅使用 JavaScript 進行節(jié)點或 JavaScript 可能不擅長的復雜的低級計算。因此,web 匯編的未來看起來是前途一片光明。
總結
如果你仔細想想,所有的編程語言和框架都有能力構建復雜而強大的功能, 都可以構建解決現實世界中緊迫問題的應用程序。沒有放之四海而皆準法則,因為每種語言和框架都有其優(yōu)勢和不足,以及有意義或無意義的地方。對語言的需求是由用例、市場需求或使用該專業(yè)知識的資源庫驅動的。
永遠記住,任何編程語言或框架的目標都是完成任務,要選擇最適合你的技術。
真正的敏捷適應性和迭代學習才能真正讓你在未來幾十年保持與時俱進。就我個人而言,作為一個通曉多種語言的開發(fā)者,這為我敞開了大門
如果你喜歡這篇文章,那么請與你的朋友和同事分享,如果你認為這些語言在未來 5 年內將不再適用,那么請評論,我也很樂意聽到你的聲音。
英文:Top 7 Programming Languages & Frameworks To Learn in 2020 That will Still be Relevant In 5+ Years
鏈接:https://medium.com/swlh/top-7-programming-languages-frameworks-to-learn-in-2020-that-will-still-be-relevant-in-5-years-11245d7e2d56
作者簡介:Timothy Mugayi。技術傳播者,講師,多語言開發(fā)者,熱愛技術創(chuàng)新
譯者:明明如月,知名互聯(lián)網公司 Java 高級開發(fā)工程師,CSDN 博客專家。
者|Next.js 團隊
譯者|無明
出處丨前端之巔
在經過 26 次金絲雀發(fā)布和 340 萬次下載之后,近日,我們正式發(fā)布了 Next.js 7.0,新功能包括:
Next.js 的主要目標之一是提供最佳的性能和開發(fā)者體驗。最新版本為構建和調試管道帶來了很多重大改進。
得益于 Webpack 4 和 Babel 7,以及我們對代碼庫做出的很多改進和優(yōu)化,Next.js 現在在開發(fā)過程中的啟動速度提高了 57%。
我們新增了增量編譯緩存,讓變更代碼的構建速度快了 40%。
以下是我們收集的一些示例數據:
因為使用了 webpackbar,在開發(fā)和構建的同時可以看到更好的實時反饋:
使用 react-error-overlay 更好地報告錯誤
準確地渲染錯誤對于良好的開發(fā)和調試體驗來說是至關重要的。到目前為止,我們可以渲染錯誤消息和堆棧跟蹤信息。我們在此基礎上更進一步,我們使用 react-error-overlay 來豐富堆棧跟蹤信息:
這是之前和之后的錯誤顯示比較:
另外,借助 react-error-overlay,你只需單擊特定代碼塊就可以輕松打開文本編輯器。
從發(fā)布第一個版本以來,Next.js 一直使用 Webpack 來打包代碼和重用豐富的插件。Next.js 現在使用了最新的 Webpack 4,其中包含很多改進和 bug 修復。
另一個新功能是支持 WebAssembly,Next.js 甚至可以進行 WebAssembly 服務器渲染。
這里有一個例子:
https://github.com/zeit/next.js/tree/canary/examples/with-webassembly
因為使用了 Webpack 4,我們引入了一種從捆綁包中提取 CSS 的新方法,這個插件叫作 mini-extract-css-plugin(https://github.com/webpack-contrib/mini-css-extract-plugin)。
mini-extract-css-plugin 提供了 @zeit/next-css、@zeit/next-less、@zeit/next-sass 和 @zeit/next-stylus。
這些 Next.js 插件的新版本解決了與 CSS 導入相關的 20 個問題,例如,現在支持 import() 動態(tài)導入 CSS:
// components/my-dynamic-component.js import './my-dynamic-component.css' export default () => <h1>My dynamic component</h1> // pages/index.js import dynamic from 'next/dynamic' const MyDynamicComponent = dynamic(import('../components/my-dynamic-component')) export default () => <div> <MyDynamicComponent/> </div>
一個重大改進是現在不再需要在 pages/_document.js 中添加一下內容:
<link rel="stylesheet" href="/_next/static/style.css" />
Next.js 會自動注入這個 CSS 文件。在生產環(huán)境中,Next.js 還會自動向 CSS URL 中添加內容哈希,當文件發(fā)生變更時,最終用戶就不會得到舊文件,并且能夠獲得不可變的永久緩存。
簡而言之,要在 Next.js 項目中支持導入.css 文件,只需要在 next.config.js 中注冊 withCSS 插件:
const withCSS = require('@zeit/next-css') module.exports = withCSS({/* my next config */})
從版本 3 開始,Next.js 就通過 next/dynamic 來支持動態(tài)導入。
作為這項技術的早期采用者,我們必須自己編寫解決方案來處理 import()。
因此,Next.js 逐漸缺失 Webpack 后來引入的一些功能,包括 import()。
例如,無法手動命名和捆綁某些文件:
import(/* webpackChunkName: 'my-chunk' */ '../lib/my-library')
另一個例子是在 next/dyanmic 模塊之外使用 import()。
從 Next.js 7 開始,我們不再直接使用默認的 import(),Next.js 為我們提供了開箱即用的 import() 支持。
這個變更也是完全向后兼容的。使用動態(tài)組件非常簡單:
import dynamic from 'next/dynamic' const MyComponent = dynamic(import('../components/my-component')) export default () => { return <div> <MyComponent /> </div> }
這段代碼的作用是為 my-component 創(chuàng)建一個新的 JavaScript 文件,并只在渲染< MyComponent/>時加載它。
最重要的是,如果沒有進行渲染,< script>標記就不會出現在初始 HTML 文檔中。
為了進一步簡化我們的代碼庫并利用優(yōu)秀的 React 生態(tài)系統(tǒng),在 Next.js 7 中,我們使用 react-loadable 重寫了 next/dynamic 模塊。這為動態(tài)組件引入了兩個很棒的新特性:
Next.js 6 中就已經引入了 Babel 7 測試版。后來 Babel 7 穩(wěn)定版本發(fā)布,現在,Next.js 7 正在使用這個新發(fā)布的穩(wěn)定版 Babel 7。
一些主要特性:
如果你的 Next.js 項目中沒有自定義 Babel 配置,那么就不存在重大變更。
但如果你具有自定義 Babel 配置,則必須將相應的自定義插件 / 預設升級到最新版本。
如果你從 Next.js 6 以下的版本升級,可以使用 babel-upgrade 工具。
除了升級到 Babel 7 之外,當 NODE_ENV 被設置為 test 時,Next.js Babel 預設(next/babel)現在默認將 modules 選項設置為 commonjs。
這個配置選項通常是在 Next.js 項目中創(chuàng)建自定義.babelrc 的唯一理由:
{ "env": { "development": { "presets": ["next/babel"] }, "production": { "presets": ["next/babel"] }, "test": { "presets": [["next/babel", { "preset-env": { "modules": "commonjs" } }]] } } }
使用 Next.js 7,這將變成:
{ "presets": ["next/babel"] }
現在可以刪除.babelrc,因為在沒有 Babel 配置時,Next.js 將自動使用 next/babel。
Next.js 在預渲染 HTML 時會將頁面內容放在< html>、< head>、< body>結構中,并包含頁面所需的 JavaScript 文件。
這個初始載荷之前約為 1.62kB。在 Next.js 7 中,我們優(yōu)化了初始 HTML 載荷,現在為 1.5kB,減少了 7.4%,讓頁面變得更加精簡。
我們主要通過以下幾種方式來縮小文件:
在 Next.js 5 中,我們引入了 assetPrefix 支持,讓 Next.js 可以自動從某個位置(通常是 CDN)加載資源。如果你的 CDN 支持代理,可以使用這種辦法。你可以像這樣請求資源:
https://cdn.example.com/_next/static/<buildid>/pages/index.js
通常,CDN 先檢查緩存中是否包含這個文件,否則直接從源中請求文件。
不過,某些解決方案需要將目錄直接預先上傳到 CDN 中。這樣做的問題在于 Next.js 的 URL 結構與.next 文件夾中的文件夾結構不匹配。例如我們之前的例子:
https://cdn.example.com/_next/static/<buildid>/pages/index.js // 映射到: .next/page/index.js
在 Next.js 7 中,我們改變了.next 的目錄結構,讓它與 URL 結構相匹配:
https://cdn.example.com/_next/static/<buildid>/pages/index.js // 映射到: .next/static/<buildid>/pages/index.js
盡管我們建議使用代理類型的 CDN,但新結構也允許不同類型 CDN 的用戶將.next 目錄上傳到 CDN。
我們也引入了 styled-jsx 3,Next.js 的默認 CSS-in-JS 解決方案,現在已經為 React Suspense 做好了準備。
如果一個組件不屬于當前組件作用域的一部分,那么該如何設置這個子組件的樣式呢?例如,如果你將一個組件包含在父組件中,并只有當它被用在父組件中時才需要特定的樣式:
const ChildComponent = () => <div> <p>some text</p> </div> export default () => <div> <ChildComponent /> <style jsx>{` p { color: black } `}</style> </div>
上面的代碼試圖選擇 p 標簽,但其實不起作用,因為 styled-jsx 樣式被限定在當前組件,并沒有泄漏到子組件中。解決這個問題的一種方法是使用:global 方法,將 p 標記的前綴移除。但這樣又引入了一個新問題,即樣式泄露到了整個頁面中。
在 styled-jsx 3 中,通過引入一個新的 API css.resolve 解決了這個問題,它將為給定的 syled-jsx 字符串生成 className 和< style>標簽(styles 屬性):
import css from 'styled-jsx/css' const ChildComponent = ({className}) => <div> <p className={className}>some text</p> </div> const { className, styles } = css.resolve`p { color: black }` export default () => <div> <ChildComponent className={className} /> {styles} </div>
這個新 API 可以將自定義樣式傳給子組件。
由于這是 styled-jsx 的主要版本,如果你使用了 styles-jsx/css,那么在捆綁包大小方面有一個重大變化。在 styled-jsx 2 中,我們將生成外部樣式的“scoped”和“global”版本,即使只使用“scoped”版本,我們也會將“global”版本包含在內。
使用 styled-jsx 3 時,全局樣式必須使用 css.global 而不是 css,這樣 styled-jsx 才能對包大小進行優(yōu)化。
App 和 Page 之間的 React Context(服務器端渲染)
從 Next.js 7 開始,我們支持 pages/_app.js 和頁面組件之間的 React Context API。
以前,我們無法在服務器端的頁面之間使用 React 上下文。原因是 Webpack 保留了內部緩存模塊而不是使用 require.cache,我們開發(fā)了一個自定義 Webpack 插件來改變這種行為,以便在頁面之間共享模塊實例。
這樣我們不僅可以使用新的 React 上下文,在頁面之間共享代碼時還能減少 Next.js 的內存占用。
從 Next.js 首次發(fā)布以來,就已獲得相當多的用戶,從財富 500 強公司到個人博客。我們非常高興看到 Next.js 的采用量一直在增長。
目前,超過 12,500 個被公開索引的域名在使用 Next.js。我們有超過 500 名貢獻者,他們至少提交過一次代碼。在 GitHub 上,這個項目已經有 29,000 個 star。自首次發(fā)布以來,已提交了大約 2200 個拉取請求。
Next.js 社區(qū)在 spectrum.chat/next-js 上擁有近 2000 名成員。
英文原文
https://nextjs.org/blog/next-7
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。