【轉(zhuǎn)載】Angular Universal教學(xué)-如何將Server Side Render 專案部屬到IIS上
翻遍了各大網(wǎng)站,StakeOverFlow也每一篇仔細(xì)看過。
發(fā)現(xiàn)對(duì)于如何一步步將Angular Universal完整部屬到IIS上的步驟,不是內(nèi)容過時(shí),就是步驟漏了不少。
因此撰寫一篇完整的將SSR專案部屬到IIS上的步驟。
相信我,這一篇絕對(duì)會(huì)是最完整的部屬流程文章,如果不是,倒想看看你的完整流程。
在上一篇的教學(xué)中,我們成功的將Client-Side-Render的專案,導(dǎo)入了SSR
并且透過cli幫我們生成了兩個(gè)資料夾server/browser。
接下來要介紹,拿到這兩個(gè)資料夾后,我們要如何將專案部屬到IIS上,讓其順利執(zhí)行。
畢竟在本地端上可以執(zhí)行與在Server上運(yùn)行是完全不同的事。
Step1: 將我們dist的資料夾直接復(fù)制,貼到你要運(yùn)行IIS站臺(tái)的資料夾中。
Step2: 將dist/專案名稱/server內(nèi)的main.js放入IIS站臺(tái)根目錄資料夾內(nèi)。
Step3.將IIS WebConfig放入IIS站臺(tái)根目錄資料夾內(nèi)
此時(shí),我們的資料夾的目錄中,應(yīng)該會(huì)長這個(gè)樣子:

Step4.安裝Url Rewrite2.1,iisnode,iisexpress
由于當(dāng)User連線到我們的Server時(shí),我們必須要先將首頁的內(nèi)容給編譯完成,因此存取的檔案會(huì)是剛剛放在外層的main.js
所以,我們需要透過UrlRewrite,幫我們做重導(dǎo)向,強(qiáng)制執(zhí)行main.js。
而要能夠執(zhí)行main.js,我們需要透過iisnode以及iisexpress來運(yùn)行。
要確認(rèn)是否有安裝iisnode模組,我們可以到:
站臺(tái)→網(wǎng)站→模組→確認(rèn)是否已安裝iisnode模組

Step5.若沒有在模組中看到iisnode,我們可以到C:\Program Files\iisnode執(zhí)行setupsamples.bat
Step6.安裝Node.js
如同上述所說,我們需要透過node.js來幫我們編譯,因此在Server上我們?nèi)孕枰惭bnode.js,并透過它安裝一些指令與編譯。
Step7透過cmd.exe進(jìn)入專案后利用npm安裝express module
npm install express
Step8.到剛剛我們下載的webconfig設(shè)定node.js讀取路徑(放在webServer標(biāo)簽底下)
<iisnode nodeProcessCommandLine =“ C:\ Program Files \ nodejs \ node.exe” />

9.設(shè)定IISUser存取整個(gè)資料夾的權(quán)限
由于我們連線進(jìn)來后,IIS會(huì)根據(jù)我們上面webconfig中的urlRewrite,將所有的連線都Redirect到main.js,并驅(qū)動(dòng)node.js來執(zhí)行我們的專案。
因此我們需要讓IIS能存取整個(gè)資料夾的權(quán)限。如果沒有設(shè)定,就會(huì)噴出以下錯(cuò)誤:
node.exe進(jìn)程尚未將任何信息寫入stderr,否則iisnode無法捕獲此信息。常見原因是iisnode模塊無法創(chuàng)建日志文件來捕獲來自node.exe的stdout和stderr輸出。請(qǐng)檢查運(yùn)行node.js應(yīng)用程序的IIS應(yīng)用程序池的標(biāo)識(shí)是否具有對(duì)node.js應(yīng)用程序所在的服務(wù)器上目錄的讀寫訪問權(quán)限。
Step10.將專案的package.json復(fù)制過去到IIS站臺(tái)根目錄
這點(diǎn)筆者也很是疑惑。由于在過去的Angular專案,當(dāng)我們執(zhí)行ng build --prod 時(shí),會(huì)幫我們產(chǎn)生已打包好的專案,并放到dist中。
此時(shí)理當(dāng)所有有使用到的Module都會(huì)一并放到dist中,因此dist應(yīng)該就夠用了,但不知為何在導(dǎo)入SSR之后,還是需要整包的nodeModules,否則仍然會(huì)報(bào)錯(cuò),回應(yīng)找不到該Module。這點(diǎn)若有其他讀者有發(fā)現(xiàn)其他解法的話,再請(qǐng)留言告知。
因此目前的解法是將專案的package.json復(fù)制過去,并安裝其使用到的套件。
Step11.執(zhí)行npm insall
將所有package.json的套件都安裝到站臺(tái)中。
Step12.設(shè)定不想要Rewrite的Url
若網(wǎng)站底下還有其他子站臺(tái)(API或是其他的),則需要進(jìn)行在webconfig中撰寫 urlRewrite的role。
由于webconfig會(huì)將所有輸入的url,全部轉(zhuǎn)址到main.js,所以要在上方增加不允許轉(zhuǎn)址的url role。
如:
<rule name="apiContent" patternSyntax="Wildcard" stopProcessing="true"> <match url="api/*" /> <action type="None" /> </rule>
Step13.收工! PS 記得開防火墻
以上文章敘述如有錯(cuò)誤及觀念不正確,請(qǐng)不吝嗇指教:)
有任何家教、案子或技術(shù)相關(guān)問題請(qǐng)都?xì)g迎聯(lián)系我
posted on 2020-07-30 09:45 www.blender-3d.cn 閱讀(307) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)