目录
我们正在构建的
创建并设置VUE应用程序
最后,确保在./src/main.js文件中导入CSS文件:
基本应用结构
netlify函数的快速简介
>它捕获了页面的屏幕截图
>用于本地开发和生产的木偶
获取网站元数据和屏幕截图
测试和部署功能
>我们将创建将显示正常链接的linkPreview组件。这些组件将通过其目标URL作为道具传递。在将组件安装在应用程序中之前,它将带有targetUrl的帖子请求到我们的无服务器函数,获取预览数据,并在我们悬停在链接上时将其显示。
>由于无服务器架构的性质,在无服务器函数中调试Puppeteer代码可能会有些棘手。但是,您可以使用“ console.log”函数打印出值并跟踪代码的执行。您还可以使用“ page.on('console',msg => console.log(msg.text()))”函数来记录浏览器的所有控制台输出。请记住要检查您的无服务器功能提供商仪表板中的日志。
如何在无服务器函数中处理puppeteer中的错误?
>我可以使用Puppeteer在无服务器函数中自动化表单?您可以使用“ page.type()”函数填写输入字段,而“ page.click()”功能单击按钮或链接。提交表单后,您可以使用Puppeteer导航结果页面并提取所需的数据。
>
首页 web前端 js教程 使用Puppeteer和无服务器功能构建链接预览器

使用Puppeteer和无服务器功能构建链接预览器

Feb 09, 2025 pm 12:19 PM

使用Puppeteer和无服务器功能构建链接预览器

在本教程中,我们将看到如何与前端应用程序一起部署无服务器功能,并创建一个生成图像并从链接中获取元数据的API。

>使用无服务器功能,开发人员可以在其应用程序中创建和实现现代功能,而无需经历设置和管理后端服务器的痛苦。这些功能由云计算公司托管和部署。

NETLIFY功能使创建和部署无服务器功能易于NetLify托管的应用程序。

钥匙要点

>利用puppeteer和NetLify函数来构建无服务器链接预览器,该链接预览器可从URL获取元数据和屏幕截图。

首先设置带有尾风CSS的VUE 3应用程序,以确保现代响应式设计。
  • 实现NetLify功能以处理诸如API创建之类的后端过程,而无需管理服务器,增强可扩展性和易于部署的性能。
  • >在NetLify函数中使用Puppeteer来自动化浏览器任务,例如捕获屏幕截图和从网页中提取元数据。
  • >在NetLify上部署应用程序,利用GIT存储库的连续部署进行简化的更新和维护。
  • 通过合并与无服务器函数交互以在前端动态显示链接的VUE组件来增强用户体验。
  • >先决条件
  • 要与本教程一起,您需要熟悉JavaScript,Vue.js,Git,Github和Netlify。您还应该在安装了Vetur(用于IntelliSense)的文本编辑器(例如VS代码),以及在计算机上安装的节点的最新版本。您可以在此处安装节点。您可以通过运行命令节点-VIN终端检查节点的版本。
  • >您还应该在Netlify上拥有一个帐户。如果尚未创建一个。
>

我们正在构建的

>展示我们如何使用前端应用程序轻松设置无服务器功能,我们将使用自定义链接预览器组件构建应用程序。

此组件将带有URL的请求发送给我们的无服务器函数。然后,该函数使用Puppeteer使用URL从目标站点获取元数据并生成站点的屏幕截图。

>该功能将元数据和屏幕截图发送回我们前端的组件,以将其显示为应用程序中的链接预览。

这是指向Netlify上部署的示例项目的链接。这是要跟随的github回购。

创建并设置VUE应用程序

我们将使用VUE CLI创建VUE 3应用程序。我们还将安装和设置Tailwind CSS,这是一种公用事业优先的CSS框架,可为应用程序提供我们可以使用的类,而无需编写大量自定义CSS。

>安装并设置VUE

要快速脚手架vue应用程序,我们将使用VUE CLI。要安装Vue CLI,请运行:

<span>npm install -g @vue/cli
</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>安装了CLI后,我们可以通过运行来创建一个项目:>

>这将提示我们为安装选择一个预设。我们将选择“手动选择功能”,以便可以选择所需的功能。这是我选择的选项:
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>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>

使用Puppeteer和无服务器功能构建链接预览器>运行CD链接浏览器以输入新创建的项目。

>安装并设置尾风CSS

要安装尾风,我们将使用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 and Postcss.config.js文件:

这将在项目的根部创建一个最小的tailwind.config.js文件。

npx tailwindcss init <span>-p
</span>
登录后复制
登录后复制
配置尾风以删除生产中未使用的样式

在tailwind.config.js文件中,配置带有所有页面和组件的吹扫选项,以便tailwind可以在生产构建中的Treekake Undused Styles:

>

在CSS文件中包括后风

>创建./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>
登录后复制
登录后复制
tailwind将在制造时间将这些指令与基于配置的设计系统生成的所有样式交换。

最后,确保在./src/main.js文件中导入CSS文件:

就是这样,我们可以运行我们的服务器:
<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>
登录后复制
>现在该应用程序正在运行,如果我们转到提供的URL,我们应该看到VUE的默认演示应用程序,并看到已应用了tailwind的前风格基本样式。

<span>npm run serve
</span>
登录后复制

>安装尾风CSS Intellisense扩展使用Puppeteer和无服务器功能构建链接预览器

为了获得更平滑的开发体验,请安装tailwind CSS Intellisense扩展名。

基本应用结构

这是我们的项目文件夹的外观概述:

>
<span>npm install -g @vue/cli
</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

netlify函数的快速简介

>部署用作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>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>状态代码,在这种情况下为200

身体,这是

> stringified

对象。

>
  • >该函数将在我们的网站/.netlify/functions/hello上调用,并且将返回200个状态代码和消息“ Hello,World!”。
  • >现在我们已经了解了Netlify函数的工作方式,让我们在实践中查看它们。 创建我们的第一个NetLify函数
  • 为了创建我们的第一个NetLify函数,我们将在项目目录中创建一个新的文件函数/Hello.js,然后输入以下内容:>

>创建功能文件后,我们必须进行一些必要的配置,以便我们在本地运行我们的功能。>

设置NetLify Configuration

我们将在我们的项目文件夹的根部创建一个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功能部署项目。

要安装CLI,请确保您有Node.js版本10或更高版本,然后运行:>

这将在全球范围内安装NetLify CLI,因此我们可以从任何目录运行NetLify命令。要获取版本,用法等等,我们可以运行:

>
npx tailwindcss init <span>-p
</span>
登录后复制
登录后复制

>使用Netlify Dev

运行该应用程序

>要使用Netlify CLI在本地运行我们的项目,请停止Dev Server(如果是活动),然后运行:>

>这是我们应该看到的:

>

<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文件,因此它加载了在进程中定义的默认值。

  • 其次,它加载或部署位于功能目录中的功能。功能服务器部署在不同的随机端口 - 36647。
  • > 最后,它自动检测应用程序所构建的框架,并运行必要的构建过程以部署应用程序。在这种情况下,您可以看到“使用vue.js启动netlify dev”。它还支持React和其他流行的框架。

    然后,Netlify在http:// localhost:8888。

  • >现在我们的服务器已经启动并且我们的功能已加载,我们可以调用/调用它。默认情况下,我们可以使用此路由访问我们的功能:/.netlify/functions/。

  • >要注意的一件事是,我们不需要指定运行功能服务器的端口。我们可以使用上面的默认路由与我们的功能服务器进行通信。 Netlify会自动解析幕后的URL和端口。
>

如果我们将Get请求发送到http:// localhost:8888/.netlify/functions/hello,我们应该得到{“ message”:“ Hello,world!”}的响应。

使用Puppeteer和无服务器功能构建链接预览器

太好了!我们的第一个无服务器函数有效!

创建预览函数API

>现在我们的NetLify函数有效,我们可以开始构建预览API。这是我们功能API将要做的事情的快速分解:

它接收将从前端发送的目标URL

它将数据传递给puppeteer

> 然后,puppeteer启动一个新的无头浏览器实例使用Puppeteer和无服务器功能构建链接预览器

puppeteer在浏览器中打开一个新页面,并导航到目标URL

然后,puppeteer提取

和<meta>标签的内容,以描述目标页面> <h2 id="gt-它捕获了页面的屏幕截图">>它捕获了页面的屏幕截图</h2> <p>>它将屏幕截图数据发送回前端</p> <ul> <li>>现在我们对API的功能要做什么有了一个基本思路,我们可以开始创建函数。让我们从安装和设置netlify函数的伪 </li>安装和配置Puppeteer <li> <ande> Puppeteer是一个节点库,可提供高级API来控制无头铬或铬浏览器。它也可以配置为使用完整的(无头)铬或铬。您可以使用Puppeteer在浏览器中手动执行大多数事情。有关Puppeteer的更多信息,可以在Puppeteer文档中找到。</ande> </li>> <li>为了开始使用Puppeteer,我们将其安装在项目中。 </li> <h4 id="gt-用于本地开发和生产的木偶">>用于本地开发和生产的木偶</h4> <p>puppeteer下载了最新版本的Chromium(〜170MB MacOS,〜282MB Linux,〜280MB Windows),保证可以与API一起使用。 </p> <p>>我们无法使用完整的Puppeteer软件包进行生产。这是因为Netlify功能的最大尺寸为50MB,并且Chromium包装太大。 </p>感谢IRE Aderinokun的这篇非常有用的文章,我们仍然可以在本地和生产中与Puppeteer合作。这是我们要做的:<p> </p>>用于本地部署的开发依赖性<p>* <em> </em>要使Puppeteer在本地和生产中工作,我们必须将Puppeteer-Core和Chrome-aws-Lambda安装为</p>生产依赖项</ul> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>npm install -g @vue/cli </span></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>。 <p> <em>>您可以在此处查看Puppeteer和Puppeteer核心之间的区别。但是,主要区别在于,安装时Puppeteer-Core不会自动下载Chromium。 </em> </p>>由于Puppeteer-core没有下载浏览器,因此我们将安装Chrome-aws-Lambda,这是“ AWS Lambda和Google Cloud功能的Chromium Binary binary”,我们可以在NetLify函数中使用。这些是将在生产中起作用的软件包:<p> </p> <p>>现在我们已经安装了软件包,让我们创建我们的函数。<ancy>> </ancy></p>使用已经安装的浏览器作为puppeteer<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">vue create link-previewer </pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>> <p>>如果Puppeteer安装完整的浏览器以与本地一起使用,这将是一个问题,这可能是由于网络或带宽的问题而引起的。有一个解决方法,它可以将我们已经安装的铬或铬浏览器用于木偶。</p> 我们需要的是我们本地机器中浏览器的路径。我们将使用它作为我们的可执行路径,我们将将其传递到puppeteer.launch()方法。这告诉Puppeteer在哪里可以找到浏览器可执行文件。<h4> </h4>>如果您不确切地知道在哪里找到可执行路径,请打开浏览器,然后转到Chrome://版本/显示Chrome的版本。<p> </p> <p> </p> <p>>复制路径并在项目的根部创建.env文件。<and>> </and></p> <p>要获取.env文件的内容,我们将安装另一个软件包 - dotenv:<ancy>> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907477031343.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" > </ancy></p>>现在我们已经成功安装了软件包,让我们创建NetLify函数。<antlify> <p>创建Generate-Preview函数</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>创建一个新文件,./functions/generate-preview.js:<p> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>npm uninstall tailwindcss postcss autoprefixer </span><span>npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9 </span></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>在上面的代码中,我们正在做很多事情。首先,我们从event.body中的请求有效载荷中获取targetUrl。这将通过邮政请求发送。<p> 接下来,我们使用Chrome-Aws-Lambda软件包启动浏览器。我们使用puppeteer.launch()方法来执行此操作。此方法将对象作为具有一些可选属性的参数。我们传递给此方法的一个重要属性是可执行路径。 </p> <p>我们将可执行路径分配给process.env.excecutable_path ||等待Chromium.ectable Path,使包裹能够找到可用的无头浏览器启动。</p> <p>>启动浏览器后,我们将使用browser.newpage()方法在浏览器中打开一个新页面。我们还使用page.setviewport()方法为页面设置所需的浏览器视口。 </p> <p>请注意,运行任何功能时我们正在使用等待的关键字。这是因为Puppeteer的工作异步性,并且某些功能可能需要一些时间才能执行。</p>> <p>>我们还可以使用page.emulatemediafeatures()方法来执行诸如Puppeteer定义页面的媒体功能,该方法采用了一系列媒体功能对象。这就是我们将偏爱颜色的风格设置为黑暗的方式。</p>> <h3 id="获取网站元数据和屏幕截图">获取网站元数据和屏幕截图</h3> <p>接下来,我们将导航到目标URL并获取我们的标题,描述和屏幕截图:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>npm install -g @vue/cli </span></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div> <p>>在上面的代码中,我们使用TryCatch块来包装我们的代码,以便从等待Page.goto(targetUrl)开始,该导航到目标URL,我们可以捕获错误和将其发送到我们的前端。通过提供无效的URL可能会发生错误。</p> <p>如果URL有效,我们使用页面。$ eval()方法获得标题,该方法类似于常规文档。我们将标题标签的CSS选择器(头>标题)传递为第一个参数。我们还将函数el => el.textContent作为第二个参数,其中el是我们传递到函数的参数,并且是标题元素。现在,我们可以使用title.textcontent获得值。 </p> <p>请注意,所有这些都包裹在括号((())中,我们有一个|| null后一页。$ eval。因此,如果页面为null。 </p>>要获取页面的描述,我们将使用page.evaluate()方法,该方法允许我们运行某些客户端JavaScript并将值返回到分配的变量 - 描述。 <p>>我们将函数和参数传递给page.evaluate()方法。在函数中,我们使用document.queryselector获取各种元描述,例如<meta name="“" descript content="“">” />用于默认说明,<meta property="“" og content="“">” />用于OpenGraph Description。</p> <p>>获得元素后,我们使用三元运算符获取内容,并在元素存在时将其添加到描述对象,或者如果不存在元素,则null。 </p>>一旦获得了描述,我们就会使用page.screenshot()方法进行页面屏幕截图,然后使用browser.close()。<p>>最后,我们在Body属性中发送页面详细信息一个具有200个状态代码的JSON对象。如果以前的任何一个步骤中发生错误而错误消息。 </p> <h3 id="测试和部署功能">测试和部署功能</h3> <p>>让我们使用API​​测试仪测试我们的功能。您可以在浏览器中安装邮递员或TALEND API测试仪,也可以使用Thunder Client Extension(VS代码的API测试仪)。 </p>您也可以使用卷曲:<p> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>npm install -g @vue/cli </span></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>>使用NetLify dev命令运行该函数。<p> </p> <p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907477228599.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" > </p>>我们可以使用functions Server的端口或默认端口发送请求:NetLify Dev Server的8888端口以将请求发送到我们的功能。我将使用http:// localhost:8888/.netlify/functions/generate-preview发送带有targeturl的对象的邮政请求:<p>> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">vue create link-previewer </pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>当我们发送请求时,这是我们得到的响应。<p>> </p> <p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907477484427.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" > </p>我们得到一个包含我们的预览数据的JSON对象:<ancy> <p> </p>现在我们的无服务器功能起作用,让我们看看如何在前端使用它。 <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>在客户端上构建链接预览功能<p> 为了与我们的生成浏览函数进行交互,我们需要发送包含我们targeturl的发布请求。 </p> <h2 id="gt-我们将创建将显示正常链接的linkPreview组件-这些组件将通过其目标URL作为道具传递-在将组件安装在应用程序中之前-它将带有targetUrl的帖子请求到我们的无服务器函数-获取预览数据-并在我们悬停在链接上时将其显示">>我们将创建将显示正常链接的linkPreview组件。这些组件将通过其目标URL作为道具传递。在将组件安装在应用程序中之前,它将带有targetUrl的帖子请求到我们的无服务器函数,获取预览数据,并在我们悬停在链接上时将其显示。</h2>> <p>创建链接预览组件</p> <p>首先,让我们创建我们的链接预览组件SRC/COMPONTENTS/LINKPREVIEWER.VUE。</p> <h3>>在我们的<script>中,我们将通过向我们的无服务器函数发送请求并将数据保存在PreviewData对象中来获取链接预览数据。我们将在稍后在模板中使用此数据以显示数据:<ancy>> </script> </h3> 在上面的代码中,我们将Targeturl作为将传递到我们组件的道具。 <p> 在设置()中,我们将道具作为参数将其传递给我们,以便我们访问诸如targeturl的组件道具。</p> 然后,我们使用Ref:const PreviewData = Ref({})创建一个反应性PEVIEWDATA对象。在新的generatePreview()函数中,我们正在使用fetch将包含targeturl的帖子请求发送到我们的无服务器函数。如果发生错误,此功能将返回响应或null。 接下来,要在安装组件之前运行该功能,我们使用onbeforemount()挂钩。我们将异步函数作为参数传递。在该函数中,我们将PreviewData.Value分配给GeneratePreview()函数。然后从描述属性获取描述(DESC,OG,Twitter)。<p>></p> <p>要获取将在预览中显示的描述,我们将为PreviewData.Value.Description分配(desc || og || og || twitter ||“”)。这样,将一个具有值的第一个属性分配给了描述。</p>> <p>执行此操作以在我们的模板中显示预览数据:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>npm install -g @vue/cli </span></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div> 在上面的代码中,为了显示我们的映像 - 本质上是base64字符串 - 我们必须将字符串与图像类型之类的数据一起传递并编码为src-“”属性。 <p>>这就是我们的linkPreviewer.vue组件。让我们看看它在行动中。 in ./src/views/home.vue:</p> <p> </p>>在我们的home.vue文件中,我们基本上使用删除链接数组来渲染linkpreviewer组件的列表,我们将其传递给组件的targeturl props。 <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">vue create link-previewer </pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>我们也有一个元素,我们将其用于动态添加更多linkpreviewer组件。<p> </p>这是我们简单的应用现在的样子。<p> </p> <p> </p> <p>甜!我们的应用程序起作用。由于我们一直使用NetLify CLI在本地运行,让我们看看如何使用CLI。 <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907477777669.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" >>部署该应用程序netLify</p> <p>>在我们部署应用程序以进行Netlify之前,我们必须构建我们的应用程序以进行生产:<ancy>> </ancy></p> <h2>这将构建我们的应用程序,并创建一个可以部署到生产的区域/文件夹。<ancy>> </ancy> </h2>接下来,我们需要登录到我们的NetLify帐户:<ancy>> <p> </p>这将在浏览器中将您登录到您的NetLify帐户中。<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>> <p></p> <p> </p>>授权应用程序后,我们可以将项目链接到新站点。 Netlify会问我们一堆问题:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>npm uninstall tailwindcss postcss autoprefixer </span><span>npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9 </span></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div> <p> </p>您想做什么?选择“创建和配置新站点”。<p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907478061853.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" >团队?选择。</p> <p>选择一个唯一的站点名称?选择。</p> <ul>请提供发布目录(例如“公共”,“ dist”或“。”)。输入dist。<li> </li> <li>之后,Netlify将上传我们的文件并将其部署到我们的新站点。 </li>>使用github <li>部署 或者,我们可以决定从Github部署我们的网站。您要做的就是登录到GitHub,创建一个新的存储库,然后将URL复制到我们新创建的repo。 </li> <li> </li> 然后,我们在我们的项目文件夹中运行以下命令:</ul> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>npm install -g @vue/cli </span></pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div> <p><em>注意:由于身份验证问题,您可能无法从终端推入存储库,并且您可能会从GIT中收到一条消息:“支持密码身份验证的支持于2021年8月13日删除。请改用个人访问令牌。”这意味着您必须创建一个个人访问令牌(PAT)并使用它登录。要做到这一点,请访问GitHub令牌设置并生成新的令牌。选择您想要的所有权限。确保您可以访问存储库。生成PAT后,将其复制并保存在某个地方。然后,再次尝试git push -u oinct main命令,并在询问您的密码时粘贴在PAT中。 </em>一旦我们将项目推向GitHub,请前往Netlify,从Github创建一个新站点。 </p>>按照选择存储库的步骤并输入项目的构建设置。对于我们的vue项目,构建命令是npm run构建,部署目录是dist。 <p></p> <p> </p>之后,单击部署网站。 <antlify> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907478579627.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" > <p> </p>您可以选择一个函数以查看更多详细信息和日志。<p>> </p> <p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907478724563.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" > </p>sweet!<p> </p>这是在Netlify上部署的演示的链接:https://lnkpreviewr.netlify.app<p>> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173907478932965.png" class="lazy" alt="使用Puppeteer和无服务器功能构建链接预览器" >结论</p> <p>我们已经能够使用NetLify函数使用NetLify创建和部署无服务器功能。我们还看到了如何与Vue前端的功能进行交互。这次,我们曾经屏幕截图并从其他站点获取数据并与之构建了链接预览器组件,但是我们可以做更多的事情。使用无服务器功能,我们可以在前端进行更多操作,而不必费心设置后端服务器。</p> <p>进一步阅读和资源</p> <h2>这是我发现有用的一些资源和内容,我认为您也会:<ancy>><ul> <li>>项目github repo <ancy> </ancy> </li>教程 - NetLify函数<li> </li>>使用无服务器功能运行 - Jamstack Explorers(netlify.com)<li> </li>>开始使用puppeteer Google开发人员<li> </li>如何在Netlify-aws-lambda函数中使用puppeteer <ancly> <li>>如何使用Puppeteer在具有NetLify无服务器功能的API中自动化Chrome - Space Jelly</li> <li> </li>经常询问有关木偶和无服务器功能的问题(常见问题解答) </ancly> </ul>>如何在无服务器函数中调试我的PuppeTeer代码?<ance><h2 id="gt-由于无服务器架构的性质-在无服务器函数中调试Puppeteer代码可能会有些棘手-但是-您可以使用-console-log-函数打印出值并跟踪代码的执行-您还可以使用-page-on-console-msg-gt-console-log-msg-text-函数来记录浏览器的所有控制台输出-请记住要检查您的无服务器功能提供商仪表板中的日志">>由于无服务器架构的性质,在无服务器函数中调试Puppeteer代码可能会有些棘手。但是,您可以使用“ console.log”函数打印出值并跟踪代码的执行。您还可以使用“ page.on('console',msg => console.log(msg.text()))”函数来记录浏览器的所有控制台输出。请记住要检查您的无服务器功能提供商仪表板中的日志。</h2> <h3 id="如何在无服务器函数中处理puppeteer中的错误">如何在无服务器函数中处理puppeteer中的错误?</h3>><p></p>在无服务器函数中伪造的错误处理对于确保您的应用程序在upeteer中处理错误对于确保您的应用程序顺利运行。您可以使用try-catch块来处理错误。在捕获块中,您可以记录错误消息,并可选地发送带有错误消息的响应。这样,您可以跟踪和解决可能出现的任何问题。<h3></h3>>除了NetLify之外,我可以将Puppeteer与其他无服务器提供商一起使用? AWS Lambda,Google Cloud功能和Azure功能。但是,设置过程可能会根据提供商而有所不同。您可能需要使用像Chrome-aws-lambda这样的自定义构建for aws lambda。在无服务器功能中,您可以使用一些策略。首先,在多个调用中重复使用浏览器实例。其次,使用“ NetworkIdle0” Waituntil选项来确保所有网络请求都已完成。第三,禁用木偶器中的不必要功能,例如图像,CSS和字体,以加快页面加载。<p>></p>>我如何在无服务器函数中使用PuppeTeer进行屏幕截图?<h3></h3>很简单。您可以使用“ page.screenshot()”函数进行当前页面的屏幕截图。您可以指定选项,例如屏幕截图类型(JPEG或PNG),质量,是包含完整页面还是仅仅是视口。<p>></p> <h3 id="gt-我可以使用Puppeteer在无服务器函数中自动化表单-您可以使用-page-type-函数填写输入字段-而-page-click-功能单击按钮或链接-提交表单后-您可以使用Puppeteer导航结果页面并提取所需的数据">>我可以使用Puppeteer在无服务器函数中自动化表单?您可以使用“ page.type()”函数填写输入字段,而“ page.click()”功能单击按钮或链接。提交表单后,您可以使用Puppeteer导航结果页面并提取所需的数据。</h3> <p>我如何在无服务器函数中使用Puppeteer刮擦动态网站?<ante></ante></p> <h3></h3> Puppeteer非常适合刮擦无服务器功能中的动态网站,因为它可以呈现JavaScript生成的内容。您可以使用“ page.evaluate()”函数在页面上下文中运行JavaScript代码,并提取所需的数据。<p> </p>如何在无服务器函数中使用Puppeteer处理导航和页面重定向? 我可以使用Puppeteer在无服务器功能中测试我的Web应用程序吗?>>如何在无服务器功能中使用Puppeteer处理cookie和sessions?可以使用“ page.cookies()”和“ page.setCookie()”函数进行无服务器功能中的Puppeteer会话。您可以使用这些功能分别获取和设置cookie。这对于维护会话或使用不同的cookie测试应用程序的行为很有用。<h3 id="gt">></h3></ance></ancy> </h2></antlify></ancy></ancy></antlify>

以上是使用Puppeteer和无服务器功能构建链接预览器的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1653
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

前端开发中如何实现类似 VSCode 的面板拖拽调整功能? 前端开发中如何实现类似 VSCode 的面板拖拽调整功能? Apr 04, 2025 pm 02:06 PM

探索前端中类似VSCode的面板拖拽调整功能的实现在前端开发中,如何实现类似于VSCode...

See all articles