>使用無服務器功能,開發人員可以在其應用程序中創建和實現現代功能,而無需經歷設置和管理後端服務器的痛苦。這些功能由雲計算公司託管和部署。
NETLIFY功能使創建和部署無服務器功能易於NetLify託管的應用程序。鑰匙要點
>展示我們如何使用前端應用程序輕鬆設置無服務器功能,我們將使用自定義鏈接預覽器組件構建應用程序。
此組件將帶有URL的請求發送給我們的無服務器函數。然後,該函數使用Puppeteer使用URL從目標站點獲取元數據並生成站點的屏幕截圖。
這是指向Netlify上部署的示例項目的鏈接。這是要跟隨的github回購。
我們將使用VUE CLI創建VUE 3應用程序。我們還將安裝和設置Tailwind CSS,這是一種公用事業優先的CSS框架,可為應用程序提供我們可以使用的類,而無需編寫大量自定義CSS。
>安裝並設置VUE
<span>npm install -g @vue/cli </span>
>這將提示我們為安裝選擇一個預設。我們將選擇“手動選擇功能”,以便可以選擇所需的功能。這是我選擇的選項:
vue create link-previewer
選擇這些選項後,我們將被問到是否要將選項保存為預設以供以後使用。選擇y(yes)或n(否),然後繼續安裝。
Please pick a preset: Manually <span>select features </span>? Check the features needed <span>for your project: Choose Vue version, Babel, PWA, Router, Vuex, Linter </span>? Choose a version of Vue.js that you want to start the project with: <span>3.x </span>? Use <span>history mode for router? (Requires proper server setup for index fallback in production) Yes </span>? Pick a linter / formatter config: Basic ? Pick additional lint features: Lint on save ? Where <span>do you prefer placing config for Babel, ESLint, etc.? In dedicated config files </span>
>運行CD鏈接瀏覽器以輸入新創建的項目。
要安裝尾風,我們將使用PostCSS 7兼容性構建,因為尾風取決於PostCSS 8 - 在撰寫本文時,Vue 3尚未支持。 :
創建尾風配置文件
<span>npm uninstall tailwindcss postcss autoprefixer </span><span>npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9 </span>
這將在項目的根部創建一個最小的tailwind.config.js文件。
npx tailwindcss init <span>-p </span>
在tailwind.config.js文件中,配置帶有所有頁面和組件的吹掃選項,以便tailwind可以在生產構建中的Treekake Undused Styles:
>>創建./src/assets/css/main.css文件,然後使用@TailWind指令包括尾燈的基礎,組件,和實用程序樣式:
><span>// ./tailwind.config.js </span>module<span>.exports = { </span> <span>purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], </span> <span>... </span><span>} </span>
就是這樣,我們可以運行我們的服務器:
<span>/* ./src/assets/css/main.css */ </span><span><span>@tailwind base;</span> </span><span><span>@tailwind components;</span> </span><span><span>@tailwind utilities;</span> </span> <span>body{ </span> <span><span>@apply bg-gray-50;</span> </span><span>} </span>
<span>// ./src/main.js </span><span>import <span>{ createApp }</span> from 'vue' </span><span>import <span>App</span> from './App.vue' </span><span>import './registerServiceWorker' </span><span>import router from './router' </span><span>import store from './store' </span><span>import './assets/css/main.css' </span> <span>createApp(App).use(store).use(router).mount('#app') </span>
<span>npm run serve </span>
>安裝尾風CSS Intellisense擴展
這是我們的項目文件夾的外觀概述:
><span>npm install -g @vue/cli </span>
>部署用作API端點的服務器端代碼,自動運行,以響應事件,或在後台處理更複雜的作業。>基本的NetLify函數文件以下面的語法導出處理程序方法:
當調用/調用函數時,NETLIFY提供事件和上下文參數。當調用函數的端點時,處理程序會收到類似的事件對象:
>vue create link-previewer
在該功能中,我們正在返回一個具有兩個重要屬性的對象:
Please pick a preset: Manually <span>select features </span>? Check the features needed <span>for your project: Choose Vue version, Babel, PWA, Router, Vuex, Linter </span>? Choose a version of Vue.js that you want to start the project with: <span>3.x </span>? Use <span>history mode for router? (Requires proper server setup for index fallback in production) Yes </span>? Pick a linter / formatter config: Basic ? Pick additional lint features: Lint on save ? Where <span>do you prefer placing config for Babel, ESLint, etc.? In dedicated config files </span>
身體,這是
> stringified對象。
>>創建功能文件後,我們必須進行一些必要的配置,以便我們在本地運行我們的功能。
我們將在我們的項目文件夾的根部創建一個NetLify.toml文件,該文件將告訴Netlify在哪裡找到我們的功能:
netlify現在將在構建時間定位並將功能部署在功能文件夾中。
>安裝netlify cli<span>npm uninstall tailwindcss postcss autoprefixer </span><span>npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9 </span>
要在本地運行我們的功能而無需部署以NetLify,我們需要安裝NetLify CLI。 CLI使我們能夠在本地使用一些出色的Netlify功能部署項目。
這將在全球範圍內安裝NetLify CLI,因此我們可以從任何目錄運行NetLify命令。要獲取版本,用法等等,我們可以運行:
>npx tailwindcss init <span>-p </span>
>使用Netlify Dev
運行該應用程序>這是我們應該看到的:
><span>// ./tailwind.config.js </span>module<span>.exports = { </span> <span>purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], </span> <span>... </span><span>} </span>
如果您仔細觀察,您會看到一些事情正在發生:
>> NetLify嘗試將.ENV文件注入環境變量到構建過程中,然後可以通過我們的NetLify函數訪問。在這種情況下,我們沒有.ENV文件,因此它加載了在進程中定義的默認值。
然後,Netlify在http:// localhost:8888。
>現在我們的服務器已經啟動並且我們的功能已加載,我們可以調用/調用它。默認情況下,我們可以使用此路由訪問我們的功能:/.netlify/functions/。
如果我們將Get請求發送到http:// localhost:8888/.netlify/functions/hello,我們應該得到{“ message”:“ Hello,world!”}的響應。
創建預覽函數API
>現在我們的NetLify函數有效,我們可以開始構建預覽API。這是我們功能API將要做的事情的快速分解:
它接收將從前端發送的目標URL
它將數據傳遞給puppeteer>
然後,puppeteer啟動一個新的無頭瀏覽器實例
然後,puppeteer提取
>它將屏幕截圖數據發送回前端
puppeteer下載了最新版本的Chromium(〜170MB MacOS,〜282MB Linux,〜280MB Windows),保證可以與API一起使用。
>我們無法使用完整的Puppeteer軟件包進行生產。這是因為Netlify功能的最大尺寸為50MB,並且Chromium包裝太大。
感謝IRE Aderinokun的這篇非常有用的文章,我們仍然可以在本地和生產中與Puppeteer合作。這是我們要做的:>用於本地部署的開發依賴性
* 要使Puppeteer在本地和生產中工作,我們必須將Puppeteer-Core和Chrome-aws-Lambda安裝為
生產依賴項<span>npm install -g @vue/cli </span>
>您可以在此處查看Puppeteer和Puppeteer核心之間的區別。但是,主要區別在於,安裝時Puppeteer-Core不會自動下載Chromium。
>由於Puppeteer-core沒有下載瀏覽器,因此我們將安裝Chrome-aws-Lambda,這是“ AWS Lambda和Google Cloud功能的Chromium Binary binary”,我們可以在NetLify函數中使用。這些是將在生產中起作用的軟件包:
>現在我們已經安裝了軟件包,讓我們創建我們的函數。
vue create link-previewer
>如果Puppeteer安裝完整的瀏覽器以與本地一起使用,這將是一個問題,這可能是由於網絡或帶寬的問題而引起的。有一個解決方法,它可以將我們已經安裝的鉻或鉻瀏覽器用於木偶。
我們需要的是我們本地機器中瀏覽器的路徑。我們將使用它作為我們的可執行路徑,我們將將其傳遞到puppeteer.launch()方法。這告訴Puppeteer在哪裡可以找到瀏覽器可執行文件。
>複製路徑並在項目的根部創建.env文件。
要獲取.env文件的內容,我們將安裝另一個軟件包 - dotenv:
創建Generate-Preview函數
Please pick a preset: Manually <span>select features </span>? Check the features needed <span>for your project: Choose Vue version, Babel, PWA, Router, Vuex, Linter </span>? Choose a version of Vue.js that you want to start the project with: <span>3.x </span>? Use <span>history mode for router? (Requires proper server setup for index fallback in production) Yes </span>? Pick a linter / formatter config: Basic ? Pick additional lint features: Lint on save ? Where <span>do you prefer placing config for Babel, ESLint, etc.? In dedicated config files </span>
<span>npm uninstall tailwindcss postcss autoprefixer </span><span>npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9 </span>
接下來,我們使用Chrome-Aws-Lambda軟件包啟動瀏覽器。我們使用puppeteer.launch()方法來執行此操作。此方法將對像作為具有一些可選屬性的參數。我們傳遞給此方法的一個重要屬性是可執行路徑。
我們將可執行路徑分配給process.env.excecutable_path ||等待Chromium.ectable Path,使包裹能夠找到可用的無頭瀏覽器啟動。
>啟動瀏覽器後,我們將使用browser.newpage()方法在瀏覽器中打開一個新頁面。我們還使用page.setviewport()方法為頁面設置所需的瀏覽器視口。
請注意,運行任何功能時我們正在使用等待的關鍵字。這是因為Puppeteer的工作異步性,並且某些功能可能需要一些時間才能執行。
>>我們還可以使用page.emulatemediafeatures()方法來執行諸如Puppeteer定義頁面的媒體功能,該方法採用了一系列媒體功能對象。這就是我們將偏愛顏色的風格設置為黑暗的方式。
>接下來,我們將導航到目標URL並獲取我們的標題,描述和屏幕截圖:
<span>npm install -g @vue/cli </span>
>在上面的代碼中,我們使用TryCatch塊來包裝我們的代碼,以便從等待Page.goto(targetUrl)開始,該導航到目標URL,我們可以捕獲錯誤和將其發送到我們的前端。通過提供無效的URL可能會發生錯誤。
如果URL有效,我們使用頁面。 $ eval()方法獲得標題,該方法類似於常規文檔。我們將標題標籤的CSS選擇器(頭>標題)傳遞為第一個參數。我們還將函數el => el.textContent作為第二個參數,其中el是我們傳遞到函數的參數,並且是標題元素。現在,我們可以使用title.textcontent獲得值。
請注意,所有這些都包裹在括號((())中,我們有一個|| null後一頁。$ eval。因此,如果頁面為null。
>要獲取頁面的描述,我們將使用page.evaluate()方法,該方法允許我們運行某些客戶端JavaScript並將值返回到分配的變量 - 描述。>我們將函數和參數傳遞給page.evaluate()方法。在函數中,我們使用document.queryselector獲取各種元描述,例如” />用於默認說明,” />用於OpenGraph Description。
>獲得元素後,我們使用三元運算符獲取內容,並在元素存在時將其添加到描述對象,或者如果不存在元素,則null。
>一旦獲得了描述,我們就會使用page.screenshot()方法進行頁面屏幕截圖,然後使用browser.close()。>最後,我們在Body屬性中發送頁面詳細信息一個具有200個狀態代碼的JSON對象。如果以前的任何一個步驟中發生錯誤而錯誤消息。
>讓我們使用API測試儀測試我們的功能。您可以在瀏覽器中安裝郵遞員或TALEND API測試儀,也可以使用Thunder Client Extension(VS代碼的API測試儀)。
您也可以使用捲曲:
<span>npm install -g @vue/cli </span>
>
vue create link-previewer
>
現在我們的無服務器功能起作用,讓我們看看如何在前端使用它。
Please pick a preset: Manually <span>select features </span>? Check the features needed <span>for your project: Choose Vue version, Babel, PWA, Router, Vuex, Linter </span>? Choose a version of Vue.js that you want to start the project with: <span>3.x </span>? Use <span>history mode for router? (Requires proper server setup for index fallback in production) Yes </span>? Pick a linter / formatter config: Basic ? Pick additional lint features: Lint on save ? Where <span>do you prefer placing config for Babel, ESLint, etc.? In dedicated config files </span>
為了與我們的生成瀏覽函數進行交互,我們需要發送包含我們targeturl的發布請求。
創建鏈接預覽組件
首先,讓我們創建我們的鏈接預覽組件SRC/COMPONTENTS/LINKPREVIEWER.VUE。
在設置()中,我們將道具作為參數將其傳遞給我們,以便我們訪問諸如targeturl的組件道具。
然後,我們使用Ref:const PreviewData = Ref({})創建一個反應性PEVIEWDATA對象。在新的generatePreview()函數中,我們正在使用fetch將包含targeturl的帖子請求發送到我們的無服務器函數。如果發生錯誤,此功能將返迴響應或null。 接下來,要在安裝組件之前運行該功能,我們使用onbeforemount()掛鉤。我們將異步函數作為參數傳遞。在該函數中,我們將PreviewData.Value分配給GeneratePreview()函數。然後從描述屬性獲取描述(DESC,OG,Twitter)。>
要獲取將在預覽中顯示的描述,我們將為PreviewData.Value.Description分配(desc || og || og || twitter ||“”)。這樣,將一個具有值的第一個屬性分配給了描述。
>執行此操作以在我們的模板中顯示預覽數據:
<span>npm install -g @vue/cli </span>
>這就是我們的linkPreviewer.vue組件。讓我們看看它在行動中。 in ./src/views/home.vue:
>在我們的home.vue文件中,我們基本上使用刪除鏈接數組來渲染linkpreviewer組件的列表,我們將其傳遞給組件的targeturl props。
vue create link-previewer
這是我們簡單的應用現在的樣子。
甜!我們的應用程序起作用。由於我們一直使用NetLify CLI在本地運行,讓我們看看如何使用CLI。
>部署該應用程序netLify
>在我們部署應用程序以進行Netlify之前,我們必須構建我們的應用程序以進行生產:
這將在瀏覽器中將您登錄到您的NetLify帳戶中。
Please pick a preset: Manually <span>select features </span>? Check the features needed <span>for your project: Choose Vue version, Babel, PWA, Router, Vuex, Linter </span>? Choose a version of Vue.js that you want to start the project with: <span>3.x </span>? Use <span>history mode for router? (Requires proper server setup for index fallback in production) Yes </span>? Pick a linter / formatter config: Basic ? Pick additional lint features: Lint on save ? Where <span>do you prefer placing config for Babel, ESLint, etc.? In dedicated config files </span>
>授權應用程序後,我們可以將項目鏈接到新站點。 Netlify會問我們一堆問題:
<span>npm uninstall tailwindcss postcss autoprefixer </span><span>npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9 </span>
您想做什麼?選擇“創建和配置新站點”。
團隊?選擇。
選擇一個唯一的站點名稱?選擇。
<span>npm install -g @vue/cli </span>
注意:由於身份驗證問題,您可能無法從終端推入存儲庫,並且您可能會從GIT中收到一條消息:“支持密碼身份驗證的支持於2021年8月13日刪除。請改用個人訪問令牌。”這意味著您必須創建一個個人訪問令牌(PAT)並使用它登錄。要做到這一點,請訪問GitHub令牌設置並生成新的令牌。選擇您想要的所有權限。確保您可以訪問存儲庫。生成PAT後,將其複制並保存在某個地方。然後,再次嘗試git push -u oinct main命令,並在詢問您的密碼時粘貼在PAT中。 一旦我們將項目推向GitHub,請前往Netlify,從Github創建一個新站點。
>按照選擇存儲庫的步驟並輸入項目的構建設置。對於我們的vue項目,構建命令是npm run構建,部署目錄是dist。之後,單擊部署網站。
您可以選擇一個函數以查看更多詳細信息和日誌。
>
這是在Netlify上部署的演示的鏈接:https://lnkpreviewr.netlify.app
>
結論
我們已經能夠使用NetLify函數使用NetLify創建和部署無服務器功能。我們還看到瞭如何與Vue前端的功能進行交互。這次,我們曾經屏幕截圖並從其他站點獲取數據並與之構建了鏈接預覽器組件,但是我們可以做更多的事情。使用無服務器功能,我們可以在前端進行更多操作,而不必費心設置後端服務器。
進一步閱讀和資源
>
>我如何在無服務器函數中使用PuppeTeer進行屏幕截圖? 很簡單。您可以使用“ page.screenshot()”函數進行當前頁面的屏幕截圖。您可以指定選項,例如屏幕截圖類型(JPEG或PNG),質量,是包含完整頁面還是僅僅是視口。>
我如何在無服務器函數中使用Puppeteer刮擦動態網站?
如何在無服務器函數中使用Puppeteer處理導航和頁面重定向? 我可以使用Puppeteer在無服務器功能中測試我的Web應用程序嗎? >>如何在無服務器功能中使用Puppeteer處理cookie和sessions?可以使用“ page.cookies()”和“ page.setCookie()”函數進行無服務器功能中的Puppeteer會話。您可以使用這些功能分別獲取和設置cookie。這對於維護會話或使用不同的cookie測試應用程序的行為很有用。
以上是使用Puppeteer和無服務器功能構建鏈接預覽器的詳細內容。更多資訊請關注PHP中文網其他相關文章!