next.js 初步開(kāi)發(fā)到部署

文檔:https://nextjs.org/docs/getting-started

1 創(chuàng)建項(xiàng)目TS

yarn create next-app --typescript nextjs_demo

2. 配置項(xiàng)目

修改_app.tsx烹俗, 各種Provider都可以寫(xiě)在這里

import '../styles/globals.css'
import 'antd/dist/antd.css'
import type { AppProps } from 'next/app'

import { ThemeProvider } from 'styled-components'

function MyApp({ Component, pageProps }:AppProps) {
  return  <ThemeProvider theme={{
    color:'red',
    fontSize:'40px'
  }}>
    <Component {...pageProps} />
  </ThemeProvider>
}

export default MyApp

3. next/image的使用

<Image
        src={'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi2.hdslb.com%2Fbfs%2Farchive%2F3c90eb673244c95ff63bf3255230d1070a56a8e5.jpg&refer=http%3A%2F%2Fi2.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1664009576&t=b38110e63b3bf95d420e63b9c9c81f53'}
        width={800}
        height={312}
        placeholder="blur"
        blurDataURL='data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAIAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAhEAACAQMDBQAAAAAAAAAAAAABAgMABAUGIWEREiMxUf/EABUBAQEAAAAAAAAAAAAAAAAAAAMF/8QAGhEAAgIDAAAAAAAAAAAAAAAAAAECEgMRkf/aAAwDAQACEQMRAD8AltJagyeH0AthI5xdrLcNM91BF5pX2HaH9bcfaSXWGaRmknyJckliyjqTzSlT54b6bk+h0R//2Q=='
      />

4. 靜態(tài)資源放到public文件夾下

image.png

5.getServerSideProps 和 getStaticProps 的區(qū)別

getStaticProps:構(gòu)建時(shí)就會(huì)執(zhí)行衡蚂,服務(wù)器上運(yùn)行触徐,生成靜態(tài)HTML歌焦,每個(gè)人請(qǐng)求就會(huì)很快返回循衰,不會(huì)白屏
https://nextjs.org/docs/basic-features/data-fetching/get-static-props

  1. 純靜態(tài)頁(yè)面
  2. 頁(yè)面數(shù)據(jù)基本不變轧邪、許久變一次
export async function getStaticProps() {
  const res = await fetch('https://.../posts')
  const posts = await res.json()
  return {
    props: {
      posts,
    },
    revalidate: 24*60*60,  //1天更新一次 (單位秒)
  }
}

getServerSideProps:預(yù)渲染數(shù)據(jù),每次頁(yè)面請(qǐng)求都會(huì)執(zhí)行
https://nextjs.org/docs/basic-features/data-fetching/get-server-side-props

  1. 預(yù)渲染數(shù)據(jù)拖吼,先請(qǐng)求一屏的數(shù)據(jù)緩存起來(lái)(看起來(lái)頁(yè)面加載快鼻疮、無(wú)白屏)

6.頁(yè)面動(dòng)態(tài)導(dǎo)入(取消服務(wù)器渲染,比如本地判斷window借嗽、isMobile等)

頁(yè)面中的各種組件也可以動(dòng)態(tài)導(dǎo)入(先顯示loading)

index.tsx

import dynamic from 'next/dynamic'
export default dynamic(
  ()=>import('./views/home'),
  {
    ssr:false,
    loading:()=><></>
  }
)

7. 安裝styled-components

yarn add babel-plugin-styled-components --dev
.babelrc

{
  "presets": ["next/babel"],
  "plugins": [
    ["styled-components", { "ssr": true, "displayName": true }],
    [
      "import",
      {
        "libraryName":"antd"
      }
    ]
  ]
}

8.導(dǎo)入google字體态鳖,創(chuàng)建_document.tsx

import Document, { Html, Head, Main, NextScript } from "next/document";

class MyDocument extends Document {
  static async getInitialProps(ctx:any) {
    const initialProps = await Document.getInitialProps(ctx);
    return { ...initialProps };
  }

  render() {
    return (
      <Html>
        <Head>
          <link
            
            rel="stylesheet"
          />
          <link
            href="https://fonts.googleapis.com/css2?family=Roboto Condensed"
            rel="stylesheet"
          />

        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;

9.部署服務(wù)器nginx

1. 部署到自己的服務(wù)器上(聯(lián)系后臺(tái)人員進(jìn)行配置)

http://www.shanhuxueyuan.com/news/detail/111.html
nextjs打包后的文件存儲(chǔ)在.next文件夾,但是只有這個(gè)文件夾下的內(nèi)容是不夠的恶导,因?yàn)橐趎ode端運(yùn)行浆竭,還需要next以及react及reactDom等,簡(jiǎn)單起見(jiàn)惨寿,我們可以把整個(gè)項(xiàng)目都傳到服務(wù)器邦泄。這樣的缺點(diǎn)就是node_modules比較大,不過(guò)這樣最簡(jiǎn)單裂垦。 在服務(wù)器端顺囊,進(jìn)入項(xiàng)目路徑 依次執(zhí)行 npm run build ,npm run start即可將項(xiàng)目運(yùn)行在服務(wù)器端蕉拢,默認(rèn)是localhost:3000特碳,我們肯定是要通過(guò)域名訪問(wèn)項(xiàng)目,因此還需要進(jìn)行域名配置晕换,可通過(guò)nginx反向代理來(lái)實(shí)現(xiàn)测萎。

server {
  listen  80;
  server_name  yourdomain.com;

  error_log  /var/log/nginx/yourdomain_error.log;

  location / {
      proxy_pass     
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
  }
}
  • 現(xiàn)在可以通過(guò)域名訪問(wèn)了,但是還是存在一個(gè)問(wèn)題届巩,就是我們剛才執(zhí)行的npm run start命令,必須打開(kāi)命令行才有效份乒,一旦關(guān)閉命令行恕汇,進(jìn)程也終止了,簡(jiǎn)單的做法就是通過(guò)nohup在后臺(tái)執(zhí)行 npm run start 或辖,這樣關(guān)閉命令行仍然有效瘾英。
nohup   npm run start &
  • PM2是node進(jìn)程管理工具,可以利用它來(lái)簡(jiǎn)化很多node應(yīng)用管理的繁瑣任務(wù)颂暇,如性能監(jiān)控缺谴、自動(dòng)重啟、負(fù)載均衡等耳鸯,而且使用非常簡(jiǎn)單
    npm install -g pm2
    為了簡(jiǎn)單的使用pm2湿蛔,我們先把項(xiàng)目下的package.json中添加一個(gè)server指令,server指令依次執(zhí)行next build和next start
"scripts": {
  "dev": "next",
  "build": "next build",
  "start": "next start",
  "server":"next build && next start", //添加server指令
},

進(jìn)入到項(xiàng)目所在目錄
執(zhí)行如下命令

pm2 start npm --name yourName -- run server --watch

將yourName換成你的項(xiàng)目名县爬,這個(gè)是給這個(gè)進(jìn)程起的名稱阳啥,可以隨意
--watch代表監(jiān)聽(tīng)項(xiàng)目文件,當(dāng)文件發(fā)生變化是财喳,自動(dòng)重新加載如下指令察迟,這樣就很方便了斩狱,當(dāng)我們更改代碼之后,只需要傳到服務(wù)器即可扎瓶,pm2會(huì)自動(dòng)監(jiān)聽(tīng)所踊,重新執(zhí)行 npm run server

這樣就完成服務(wù)器部署了,可能有的同學(xué)還想服務(wù)器重啟之后自動(dòng)運(yùn)行這個(gè)命令概荷,使用pm2也很簡(jiǎn)單只需執(zhí)行如下命令即可

pm2 startup

2. 部署到vercel上(最后的鏈接如此:https://nextjs-demo-self.vercel.app/

    1. 將代碼push到自己的github
  • 2.打開(kāi)https://vercel.com/dashboard用自己的github賬號(hào)登錄秕岛,選擇項(xiàng)目
    1. 如果自定義了輸出目錄這里也要改成一致
const nextConfig = {
  reactStrictMode: true,
  swcMinify: true,
  images: {
    domains: ['gimg2.baidu.com'],
  },
    // distDir: 'build',
    exportPathMap: async function (
        defaultPathMap,
        { dev, dir, outDir, distDir, buildId }
    ) {
        return {
            '/': { page: '/' },
        };
    },
    images: {
        loader: 'akamai',
        path:'',
    }
}
image.png
    1. deploy
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乍赫,隨后出現(xiàn)的幾起案子瓣蛀,更是在濱河造成了極大的恐慌,老刑警劉巖雷厂,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惋增,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡改鲫,警方通過(guò)查閱死者的電腦和手機(jī)诈皿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)像棘,“玉大人稽亏,你說(shuō)我怎么就攤上這事÷铺猓” “怎么了截歉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)烟零。 經(jīng)常有香客問(wèn)我瘪松,道長(zhǎng),這世上最難降的妖魔是什么锨阿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任宵睦,我火速辦了婚禮,結(jié)果婚禮上墅诡,老公的妹妹穿的比我還像新娘壳嚎。我一直安慰自己,他們只是感情好末早,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布烟馅。 她就那樣靜靜地躺著,像睡著了一般荐吉。 火紅的嫁衣襯著肌膚如雪焙糟。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天样屠,我揣著相機(jī)與錄音穿撮,去河邊找鬼缺脉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛悦穿,可吹牛的內(nèi)容都是我干的攻礼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼栗柒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼礁扮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瞬沦,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤太伊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后逛钻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體僚焦,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年曙痘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芳悲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡边坤,死狀恐怖名扛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茧痒,我是刑警寧澤肮韧,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站旺订,受9級(jí)特大地震影響惹苗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耸峭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淋纲。 院中可真熱鬧劳闹,春花似錦、人聲如沸洽瞬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伙窃。三九已至菩颖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間为障,已是汗流浹背晦闰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工放祟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呻右。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓跪妥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親声滥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子眉撵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容