SSR打包使客戶端打包的文件名每次不一樣且能夠被服務(wù)端引用

在使用react開發(fā)過程中為了SEO等要進(jìn)行SSR,那么就要進(jìn)行客戶端和服務(wù)端分開打包,且客戶端的入口文件打包后(index.js)要在服務(wù)端的靜態(tài)模版里被引用镐侯,如下:

  const content = renderToString(
    <StaticRouter location={req.path} context={context}>
      {renderRoutes(routes)}
    </StaticRouter>
  );
  return `
            <html>
                <head>
                    <title>Home</title>
                </head>
                <body>
                    <div id="root">${content}</div>
                    <script src="/index.js"></script>
                </body>
            </html>
    `

在單純打包SPA客戶端代碼時咖刃,我們可以使用html-webpack-plugin插件進(jìn)行配置靜態(tài)模版引入文件,即使文件名進(jìn)行hash也沒問題估脆,因?yàn)樗歉鶕?jù)打包入口文件進(jìn)行引入打包后的文件;在SSR的時候座云,需要分開打包疙赠,那么這種方式就不再起作用,我們就需要進(jìn)行另外想辦法咯朦拖。

因?yàn)槿绻看慰蛻舳舜a打包后的文件名會發(fā)生變更圃阳,所以在服務(wù)端的代碼引入這個文件的時候也會發(fā)生改變,服務(wù)端也就需要每次都進(jìn)行再次打包璧帝,既然兩端都要進(jìn)行打包捍岳,那么都需要運(yùn)行打包命令,那么我們就找到了一個解決辦法:node命令是可以在代碼里通過process.env.HASH獲取到HASH參數(shù)的睬隶,那么我們在打包時可以先配置package.json

  "scripts": {
    "dev": "npm-run-all --parallel dev:**",
    "dev:build": "webpack --config webpack.server.js --watch",
    "dev:client": "webpack --config webpack.client.js --watch --$HASH",
    "dev:start": "nodemon --watch build --exec node \"./build/bundle.js\""
  }

??:這里注意要執(zhí)行以上組合命令需要如下操作锣夹,
npm install npm-run-all -g 安裝npm-run-all
npm install nodemon -g 安裝nodemon

這樣就可以在打包的時候直接運(yùn)行命令 HASH=20190710_01 yarn dev or HASH=20190710_01 npm run dev傳參,在客戶端打包文件(webpack.client.js)里接收參數(shù)苏潜,如下:

  output: {
    filename: "index_"+process.env.HASH+".js",  // 接收參數(shù)
    path: path.resolve(__dirname, "public")
  },

服務(wù)端代碼(webpack.server.js)银萍,如下:

import clientConfig from '../../webpack.client.js'
...
... 
 return `
            <html>
                <head>
                    <title>Home</title>
                </head>
                <body>
...
                    <!--直接調(diào)用客戶端打包輸出文件名-->
                    <script src="/${clientConfig.output.filename}"></script>  
                </body>
            </html>
    `

以上,就解決了客戶端打包文件名變更恤左,且服務(wù)端正確引用的問題贴唇;

PS:其他同學(xué)若有更好方式,盡可以在瀏覽評論中提出供大家參考飞袋,Thx戳气!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市授嘀,隨后出現(xiàn)的幾起案子物咳,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件览闰,死亡現(xiàn)場離奇詭異芯肤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)压鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門崖咨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人油吭,你說我怎么就攤上這事击蹲。” “怎么了婉宰?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵歌豺,是天一觀的道長。 經(jīng)常有香客問我心包,道長类咧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任蟹腾,我火速辦了婚禮痕惋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娃殖。我一直安慰自己值戳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布炉爆。 她就那樣靜靜地躺著堕虹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叶洞。 梳的紋絲不亂的頭發(fā)上鲫凶,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音衩辟,去河邊找鬼。 笑死波附,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播状答,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粉洼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仅财?” 一聲冷哼從身側(cè)響起狈究,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盏求,沒想到半個月后抖锥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亿眠,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年磅废,在試婚紗的時候發(fā)現(xiàn)自己被綠了纳像。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拯勉,死狀恐怖竟趾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宫峦,我是刑警寧澤岔帽,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站导绷,受9級特大地震影響犀勒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诵次,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一账蓉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逾一,春花似錦铸本、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陌宿,卻和暖如春锡足,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壳坪。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工舶得, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爽蝴。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓沐批,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝎亚。 傳聞我的和親對象是個殘疾皇子九孩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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

  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,289評論 4 31
  • 原文首發(fā)于:Webpack 3躺彬,從入門到放棄 Update (2017.8.27) : 關(guān)于 output.pub...
    昵稱都被用完了衰閱讀 1,897評論 4 19
  • 構(gòu)建一個小項(xiàng)目——FlyBird,學(xué)習(xí)webpack和react。(本文成文于2017/2/25) 從webpac...
    布蕾布蕾閱讀 16,825評論 31 98
  • 33宪拥、JS中的本地存儲 把一些信息存儲在當(dāng)前瀏覽器指定域下的某一個地方(存儲到物理硬盤中)1仿野、不能跨瀏覽器傳輸:在...
    萌妹撒閱讀 2,084評論 0 2
  • 三年前結(jié)束了米蘿咖啡,離開了清溪江解,我以為设预,我再也不會重新踏上這塊土地。偶然的機(jī)會犁河,經(jīng)朋友的介紹鳖枕,我又重歸清溪了,為...
    藍(lán)小獸閱讀 269評論 0 2