>使用无服务器功能,开发人员可以在其应用程序中创建和实现现代功能,而无需经历设置和管理后端服务器的痛苦。这些功能由云计算公司托管和部署。
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中文网其他相关文章!