我們正在棄用Netlify的Nectress Next.js Build插件next-on-netlify棄用。請訪問此問題,以了解有關next-on-netlify貶值的更多信息,並提出任何問題。您還可以訪問我們的簡單遷移文檔,以幫助遷移到插件。
next-on-netlify是一個實用程序,用於在Netlify上的Next.js中啟用服務器端渲染。它將您的應用程序包裝在微小的兼容性層中,以便頁面可以使用netlify函數以呈現服務器端。
getStaticPaths頁面的後備 npm install --save next-on-netlify
我們必須將下一個應用程序構建為無服務器應用程序。您可以在此處閱讀有關Next.js的更多信息。
這非常簡單。只需在項目的根部創建next.config.js文件,然後編寫以下內容:
// next.config.js
module . exports = {
// Target must be serverless
target : "serverless" ,
} ;如果在部署中需要二進製文件,則需要以下配置(Prisma是一個示例):
// next.config.js
module . exports = {
// Target must be experimental-serverless-trace
// Your build time will be longer with this option
target : "experimental-serverless-trace" ,
} ;NEXT-NETLIFY軟件包添加了next-on-netlify命令。當我們運行此命令時,一些魔術恰好準備了我們的下一個命令。
我們希望下一個netlify命令在構建下一個js應用程序後運行。因此,讓我們將一個後建築鉤添加到我們的poffage.json文件中。您應該在現有腳本中添加"postbuild": "next-on-netlify" 。
{
"name": "my-nextjs-app",
"scripts": {
"dev": "next",
"build": "next build",
"postbuild": "next-on-netlify"
},
...
}
*如果您對“魔術”感到好奇,請查看已記錄的next-on-netlify.js文件。
我們快要完成了!我們只需要告訴NetLify如何構建我們的下一個.js應用,功能文件夾的位置以及哪個文件夾上傳到其CDN。我們使用netlify.toml文件在您的項目的根和以下說明中做到這一點:
[ build ]
command = " npm run build "
functions = " out_functions "
publish = " out_publish "注意: out_functions和out_publish被硬編碼為nex-netlify。這些目前不可配置。
如果您的項目包含私有子模型,為了部署它,您將需要:
在NetLify中生成一個部署密鑰,並將其添加到相關的子模型中,以便可以在部署過程中克隆它們。
確保將子模塊遙控器設置為SSH格式(ie [email protected]:owner/project.git ,而不是https://... )。在子模塊目錄中,可以更新Git遙控器:
# git remote set-url [remote] [url]
git remote set-url origin [email protected]:owner/project.git我們完成了。讓我們部署
如果您不熟悉Netlify,請在此處按照部署說明:https://www.netlify.com/blog/2020/11/11/how-to-deploy-next.js-sites-sites-to-netlify/
我建議您仍然使用next dev在本地構建和預覽您的應用程序。
但是,如果要模擬計算機上的NetLify部署,也可以next-on-netlify netlify-cli預覽結果。
首先,安裝最新版本的netlify-cli (您還可以查看package.json以查看Next-Netlify已對其進行測試的版本):
npm install -g netlify-cli然後,將以下[dev]塊添加到您的netlify.toml :
# netlify.toml
# [build]
# ...
[ dev ]
functions = " out_functions "
publish = " out_publish "
# We manually set the framework to static, otherwise Netlify automatically
# detects Next.js and redirects do not work.
# Read more: https://github.com/netlify/cli/blob/master/docs/netlify-dev.md#project-detection
framework = " #static "最後,將以下行添加到您的.gitignore :
# .gitignore
# Files generated by next-on-netlify command
/out_publish/
/out_functions/現在你都設定了。
從現在開始,每當您想在本地預覽應用程序時,只需運行:
npx next-on-netlify watch :這將運行next build ,以構建您的下一個。 JS應用程序和next-on-netlify以準備您的Next.js應用程序,以與NetLify兼容。任何源代碼更改都會觸發另一個構建。netlify dev :這將模擬計算機上的Netlify,讓您在http://localhost:8888上預覽應用程序。筆記:
預覽模式尚未在本地可用,即運行netlify dev ,對於沒有重新驗證或後備的靜態頁面。這將很快得到支持。
目前,所有Next.js頁麵類型的生產中都支持預覽模式。
您可以在_redirects和/或netlify.toml文件中定義自定義重定向。這些規則的優先級是:
_redirectsnext-on-netlify重定向當前,在您的netlify.toml文件中不支持重定向。
在此處閱讀有關NetLify重定向的更多信息。
next-on-netlify為您的每個SSR頁面和API端點創建一個NetLify函數。當前,您只能使用 @netlify/plugin-nextjs創建自定義NetLify函數。
如果您的Next.js API頁/路由以-background結束,則將其視為NetLify背景功能。注意:背景功能僅在某些計劃中可用。
您可以將NetLify Identity與next-on-netlify一起使用。對於所有具有服務器端渲染(GetInitialProps*,getServersideProps和api路由)的頁面,您可以通過req參數訪問客戶端context對象。
例如:
const Page = ( ) => < p > Hello World! </ p > ;
export const getServerSideProps = async ( { req } ) => {
// Get event and context from Netlify Function
const {
netlifyFunctionParams : { event , context } ,
} = req ;
// Access Netlify identity
const { identity , user } = context . clientContext ;
return {
props : { } ,
} ;
} ;
export default Page ;要從沒有服務器端渲染的頁面訪問NetLify Identity,您可以創建一個執行與身份相關的邏輯的下一個API路由:
export default async function getUser ( req , res ) {
// Get event and context from Netlify Function
const {
netlifyFunctionParams : { event , context } ,
} = req ;
// Access Netlify identity
const { user } = context . clientContext ;
// Respond with user object
res . json ( { user } ) ;
}*請注意,使用getInitialProps的頁面僅在初始頁面加載上呈現服務器端,而不是在用戶在頁面之間導航客戶端時。
getStaticPaths頁面的後備next-on-netlify後備頁面與Next.js的行為不同。在Next.js上,當導航到getStaticPaths中未定義的路徑時,它首先顯示後備頁面。然後,next.js在後台生成HTML,並緩存它以供將來的請求。
使用next-on-netlify ,當導航到getStaticPaths中未定義的路徑時,它的服務器端呈現頁面並將其直接發送給用戶。用戶從未看到後備頁面。該頁面沒有用於將來的請求。
有關此的更多信息,請參見:第7期
我們現有的下一個/圖像解決方案不是很好。我們對路線圖進行了績效改進,取決於內部工作。
為了立即獲得更好的性能,我們建議使用像Cloudinary這樣的雲提供商(請參閱Next.js文檔)。
該包由Lindsay Levine,Finn Woelm和Cassidy Williams維護。
向 @mottox2(在netlify上託管Next.js的先驅)和@danielcondemarin(AWS的Serverless-Next.js的作者)喊叫。這兩個是這個包裝的巨大靈感。
?對以下人員的貢獻,支持和Beta測試的大“謝謝”:
以下網站構建了next-on-netlify :
discatedReact.com(通過Twitter)
missionbit.org(#18)

gemini.com
bigbinary.com
創建自己的博客並部署以NetLify!
您是否正在使用next-on-netlify構建很棒的東西?讓我們知道,我們將在這裡介紹:)