我們非常興奮地宣布Next.js 3.0的穩(wěn)定版本。自從我們測(cè)試版發(fā)布以來,我們一直在使用它來為zeit.co提供支持,并收到了很多來自我們社區(qū)的反饋和貢獻(xiàn)。
讓我們來看看已經(jīng)改進(jìn)了什么,完全是新的,或者從npm獲取最新版本!
新的Next.js?Next.js是React應(yīng)用程序的零配置單命令工具鏈,具有內(nèi)置的服務(wù)器渲染,代碼分割等功能。看看學(xué)習(xí)Next.js開始吧!
靜態(tài)導(dǎo)出支持
這是GitHub社區(qū)最需要的功能。我們已經(jīng)交付了!
只需將項(xiàng)目導(dǎo)出到一個(gè)帶有.html和.css文件的目錄,就是配置您的項(xiàng)目并運(yùn)行:
$ next export
多產(chǎn)的Next.js社區(qū)已經(jīng)為您提供了一些靜態(tài)的博客生成器來下載:
動(dòng)態(tài)導(dǎo)入支持
Next.js現(xiàn)在完全支持TC39動(dòng)態(tài)導(dǎo)入。
通過動(dòng)態(tài)導(dǎo)入,我們的代碼庫(kù)被分割成一組可以動(dòng)態(tài)加載的塊。開發(fā)人員可以完全控制隨時(shí)間加載代碼,具體取決于用戶交互或數(shù)據(jù)本身。
這很容易使用。只要導(dǎo)入你的模塊作為promise ,如下所示:
const moment = import('moment')
setTimeout(function() {
moment.then(moment => {
// Do something with moment
})
}, 15000)
當(dāng)我們開始使用它時(shí),模塊將被下載。在上面的例子中,moment當(dāng)setTimeout 回調(diào)運(yùn)行時(shí)(頁(yè)面加載后約15秒),模塊將被下載。這加速了我們的主要JavaScript包,只有在我們需要的時(shí)候才加載代碼。
動(dòng)態(tài)React組件
此外,Next.js還附帶了一個(gè)強(qiáng)大的選擇實(shí)用工具,可以幫助您輕松創(chuàng)建動(dòng)態(tài)加載的React組件。 next/dynamic
動(dòng)態(tài)組件可以按需加載React代碼,但最有趣的特性是,如果它們包含在初始渲染中,則服務(wù)器渲染仍然有效!
我們來看一些例子!
import dynamic from 'next/dynamic'
const DynamicComponent = dynamic(import('../components/hello'))
export default () => (
<div>
<Header />
<DynamicComponent />
<p>HOME PAGE is here!</p>
</div>
)
加載一個(gè)組件,動(dòng)態(tài)。
import dynamic from 'next/dynamic'
const HelloBundle = dynamic({
modules: (props) => {
const components = {
Hello1: import('../components/hello1'),
Hello2: import('../components/hello2')
}
// you can add / remove components based on props
return components
},
render: (props, { Hello1, Hello2 }) => (
<div>
<h1>{props.title}</h1>
<Hello1 />
<Hello2 />
</div>
)
})
export default () => (
<HelloBundle title="Dynamic Bundle" />
)
根據(jù)動(dòng)態(tài)屬性加載不同的組件!
直到今天,代碼拆分都是基于路由,或者是用戶加載的應(yīng)用程序部分。展望未來,您將能夠根據(jù)用戶所呈現(xiàn)的數(shù)據(jù)加載代碼。
我們很高興人們用這個(gè)新的范例創(chuàng)建的應(yīng)用程序。
更美麗的錯(cuò)誤
感謝Krisztian Puska,我們已經(jīng)更新了我們的錯(cuò)誤顏色主題,使其在眼睛上更容易,更易于訪問。
改進(jìn)的熱模塊更換
我們已經(jīng)提出了各種各樣的情況,這會(huì)使得HMR(熱模塊替換)在之前無效,特別是在錯(cuò)誤恢復(fù)周圍。
向前發(fā)展,當(dāng)出現(xiàn)任何類型的錯(cuò)誤時(shí),您將能夠更改您的代碼,保存并查看錯(cuò)誤更改,替換為其他錯(cuò)誤或完全消失!
HMR:Node.JS 8.0支持
我們已經(jīng)解決了在新的Node.js 8.x發(fā)行版中使用Next.js時(shí)顯示的開發(fā)工具中的錯(cuò)誤。 ERR_INCOMPLETE_CHUNK_ENCODING
HMR:導(dǎo)航到錯(cuò)誤
如果您導(dǎo)航到出現(xiàn)任何錯(cuò)誤的頁(yè)面,則會(huì)立即進(jìn)行適當(dāng)?shù)奶??理,呈現(xiàn)錯(cuò)誤消息并使您能夠?qū)崟r(shí)進(jìn)行更正。
HMR:404錯(cuò)誤成功
我們已經(jīng)解決了導(dǎo)航到缺失頁(yè)面(正確呈現(xiàn)為404)的錯(cuò)誤,但填充它時(shí)出錯(cuò)。
HMR:更好的壞的回報(bào)
如果您碰巧返回了錯(cuò)誤的類型,我們現(xiàn)在可以順利處理這種情況。
HMR:未定義可以是一個(gè)功能
現(xiàn)在正確地捕捉到評(píng)估模塊時(shí)的任何類型的運(yùn)行時(shí)錯(cuò)誤。實(shí)時(shí)調(diào)試即將到來。 undefined is not a function
更快:無服務(wù)器就緒
啟動(dòng)時(shí)間為基線Next.js應(yīng)用程序現(xiàn)在快了5倍,從1000毫秒降低到200 毫秒。請(qǐng)繼續(xù)關(guān)注與Now無關(guān)的無服務(wù)器Next.js的一些令人興奮的公告!
更小:優(yōu)化的核心包
我們已經(jīng)進(jìn)一步優(yōu)化了核心Next.js包,現(xiàn)在已經(jīng)有10%的精簡(jiǎn)了!只有最重要的生產(chǎn)代碼才包含在您的最終捆綁包中。
4.0和超越
正如我們?cè)谄渌饕姹局笏龅哪菢樱覀儗⒑芸旃_分享我們的Next.js 4.0路線圖。
重點(diǎn)將放在更精簡(jiǎn)的核心上,更快的啟動(dòng)時(shí)間和渲染速度,與React 16的整合以及在開發(fā)過程中更好地使用緩存,以避免重新編譯。