在浏览器和Node.js环境中使用Puppeteer的Rollup与Webpack打包指南

Puppeteer是一个Node.js库,它提供了一套高级API来通过DevTools协议控制Chrome或Chromium。虽然Puppeteer通常在服务器端使用,但有时你可能需要在浏览器环境中使用它的某些功能。本文将介绍如何使用Rollup和Webpack来打包包含Puppeteer或其轻量级版本Puppeteer-core的项目,以及如何在Node.js环境中运行打包后的文件。

但是如何想在桌面上运行node.js+puppeteer,使用pkg见“使用 pkg 打包 Puppeteer 应用:跨平台自动化的轻量级选择”

使用Rollup打包具有以下几个显著特点

  1. Tree Shaking:Rollup通过静态分析代码,可以检测到哪些模块没有被使用到,并且会将这些没有使用到的模块删除,以减小最终的bundle文件的体积。这个过程被称为Tree Shaking,有助于减少不必要的代码和提升应用的性能。

  2. ES 模块(ESM)支持:Rollup原生支持ES模块的语法,可以直接处理ES模块的导入和导出。这使得开发者可以使用最新的JavaScript语言特性,以更现代化的方式组织和管理模块。

  3. 插件系统:Rollup提供了丰富的插件系统,允许开发者通过插件来扩展和定制构建过程。可以使用插件来进行代码转换、模块解析、资源处理等操作,以满足不同项目的需求。

  4. 简单和轻量:相比于其他打包工具,Rollup具有简单、轻量特点。它的配置简洁,配置选项较少,使用起来更加直观和容易上手。

  5. 多种模块格式输出:Rollup支持输出多种模块格式,如ES6模块、CommonJS模块、AMD模块以及全局变量IIFE等,这使得它可以满足不同环境和框架的需求。

  6. 跨环境支持:Rollup可以打包出适用于不同环境的代码,包括浏览器和Node.js环境,这使得它可以用于构建各种类型的应用程序。

  7. 代码分割:Rollup支持代码分割,可以将代码分割成多个小模块,提高加载速度,通过分析模块依赖关系,减少运行时的依赖加载。

  8. 运行时优化:Rollup通过分析模块依赖关系,减少运行时的依赖加载,提供更好的性能。

  9. 开发友好:Rollup提供丰富的插件和配置选项,便于开发者进行定制化打包,支持多种模块规范并能够生成优化后的代码。

  10. 支持ES6+模块语法:Rollup支持ES6+模块语法,使得打包后的代码可读性更好,几乎没有多余代码,执行耗时主要在于 Compile ScriptEvaluate Script 上。

使用Rollup打包Puppeteer-core

步骤 1:安装依赖

首先,确保你安装了Rollup、相关插件和Puppeteer-core:

npm install rollup @rollup/plugin-commonjs @rollup/plugin-node-resolve puppeteer-core --save-dev

步骤 2:配置Rollup

创建或编辑rollup.config.js文件,配置Rollup以排除puppeteer-core

import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'umd',name: 'MyBundle',sourcemap: true},plugins: [resolve(),commonjs()],external: ['puppeteer-core']
};

步骤 3:编写代码

在你的源文件中,正常导入puppeteer-core

// src/index.js
import puppeteer from 'puppeteer-core';(async () => {const browser = await puppeteer.launch();const page = await browser.newPage();await page.goto('https://example.com');// 使用Puppeteer的其它功能await browser.close();
})();

步骤 4:运行Rollup

使用以下命令运行Rollup:

npx rollup -c

这将生成dist/bundle.js文件,其中不包含puppeteer-core

注意事项

  • puppeteer-core不会自动下载浏览器,你需要确保环境中已安装浏览器或指定浏览器路径。
  • 如果在浏览器环境中使用puppeteer-core,可能需要额外设置。
  • 根据需求调整配置。

在Node.js中运行打包后的文件

打开命令行,切换到包含dist/bundle.js的目录,使用Node.js命令运行:

cd path/to/your/project/dist
node bundle.js

或者在package.json中添加脚本:

{"scripts": {"start": "node dist/bundle.js"}
}

然后运行:

npm start

使用Webpack在Node.js中打包

安装Webpack和相关依赖

npm init -y
npm install --save-dev webpack webpack-cli

如果需要处理其他文件类型,安装对应的loader:

npm install --save-dev css-loader style-loader file-loader

配置Webpack

创建webpack.config.js

const path = require('path');module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist'),libraryTarget: 'commonjs2'},target: 'node',module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']}]}
};

创建入口文件

src目录下创建index.js

添加npm脚本

package.json中添加:

"scripts": {"build": "webpack --config webpack.config.js"
}

运行Webpack

运行以下命令构建项目:

npm run build

在Node.js中使用打包后的文件

在Node.js应用中引入bundle.js

const app = require('./dist/bundle.js');

以上步骤提供了在浏览器和Node.js环境中使用Puppeteer或Puppeteer-core的基本打包指南。根据项目需求,可能需要进一步调整配置。

注意

打包运行会出现

this.browser = await puppeteer.launch(launchOptions);^
TypeError: puppeteer.launch is not a function

需要在rollup.config.mjs内加入

// rollup.config.js
import commonjs from '@rollup/plugin-commonjs';
import nodeResolve from '@rollup/plugin-node-resolve';export default {input: 'src/main.js', // 你的入口文件output: {file: 'dist/bundle.js', // 输出文件format: 'cjs', // 对于 Node.js,通常使用 'cjs'(CommonJS)sourcemap: true, // 生成源码映射文件},plugins: [nodeResolve({ preferBuiltins: true }), // 告诉 Rollup 如何处理 Node.js 核心模块commonjs(), // 转换 CommonJS 模块到 ES2015 模块// 如果你使用 Babel,可以添加如下配置// babel({//   exclude: 'node_modules/**', // 排除 node_modules 目录//   presets: [['@babel/preset-env', { modules: false }]]// }),],external: ['puppeteer-extra']  //加入排除
};

重新运行npm run build,就解决掉了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 如何处理 WebSocket 连接异常

在 C# 中使用 WebSocket 进行通信时,处理连接异常是确保应用程序稳定性和可靠性的重要环节。本文将详细介绍如何在 C# 中有效地处理 WebSocket 连接异常,并附带代码示例进行拆分讲解。 一、理解 WebSocket 连接异常 WebSocket 连接可能会由于多种原因出现…

基于Pycharm和Django模型技术的数据迁移

1.配置数据库 在trip_server/settings.py中修改配置: 其格式可访问官网:Settings | Django documentation | Django 1.1 配置数据库 文件地址:trip_server/settings.py 配置前需要创建(NaviCat)个人数据库 "…

java访问华为网管软件iMaster NCE的北向接口

最近做的一个项目,需要读取华为一个叫iMaster NCE的网管软件的北向接口。这个iMaster NCE(以下简称NCE)用于管理项目的整个网络,尤其是光网络。业主要求我们访问该软件提供的对外接口,读取一些网络信息,比如…

创造tips的秘籍——PHP回调后门

0x00 前言 php中包含回调函数参数的函数,具有做后门的潜质。 我就自己给这类webshell起了个名字:回调后门。 0x01 回调后门的老祖宗 php中call_user_func是执行回调函数的标准方法,这也是一个比较老的后门了: call_user_func…

InstructIR: High-Quality Image Restoration Following Human Instructions 论文阅读笔记

这是Radu大佬所在的Wrzburg大学的computer vision lab实验室发表在ECCV2024上的一篇论文,代码开源。文章提出了一种文本引导的All-in-One的restoration模型,如下图所示: 这个工作其实跟"InstructPix2Pix: Learning to Follow Image Edit…

【实用教程】.NET C# PDF 生成技术:哪种方法适合您的项目?

概述:本文介绍了 TX Text Control 真正的 WYSIWYG(所见即所得)模板系统所带来的独特优势,与传统的 PDF 生成系统(如 HTML 到 PDF 转换器或需要自定义编程的 PDF 库)相比,模板是可视化设计的&…

Chromium HTML5 新的 Input 类型email对应c++

一、Input 类型: email email 类型用于应该包含 e-mail 地址的输入域。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form action"demo-form.php"…

notepad++ compare插件的离线下载和安装

一、离线安装 去改地址找到最新的插件&#xff1a;https://github.com/notepad-plus-plus/nppPluginList/blob/master/doc/plugin_list_x64.md下载之后复制到插件文件夹&#xff0c;插件文件夹的打开方式如下 注意目录&#xff1a; 二、问题汇总 &#xff08;1&#xff09…

echarts地图,柱状图,折线图实战

1.地图 <template><div style"height: 100%;" class"cantainerBox"><div class"top"><div class"leftTop"><span class"firstSpan">推广进度</span><div>省份选择&#xff1a;&l…

this关键字详解

文章目录 this使用示例执行原理线程安全 this 在Java中&#xff0c;this是一个特殊的引用&#xff0c;指向当前对象的实例。JVM会给每个对象分配一个this&#xff0c;来代表当前对象&#xff0c;换句话说&#xff0c;this是一个特殊的变量&#xff0c;它保存了当前对象的内存地…

Kafka物理存储机制深度解析

Kafka物理存储机制深度解析 Apache Kafka&#xff0c;作为一个分布式流处理平台&#xff0c;其物理存储机制是确保数据高效、可靠存储和处理的关键。Kafka通过一系列精心设计的存储结构和策略&#xff0c;实现了对海量数据的快速读写、持久化存储以及高效的删除和管理。以下是…

HTB:Cicada[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行开放端口扫描 使用nmap对靶机开放端口进行脚本、服务信息扫描 首先尝试空密码连接靶机SMB服务 由于不知道账户名&#xff0c;这里我们使用crackmapexec对smb服务进行用户爆破 通过该账户连接至靶机SMB服务器提取敏感信…

张嘉译王海燕婚姻告急?17年长跑终落幕,真相究竟如何?

娱乐圈又一对金童玉女分道扬镳&#xff1f;在这个瞬息万变的娱乐圈里&#xff0c;爱情似乎总是来得快去得也快。近日&#xff0c;一则关于实力派演员张嘉译与妻子王海燕结束17年婚姻长跑的消息&#xff0c;如同一颗重标题&#xff1a;&#x1f494;张嘉译王海燕婚姻告急&#x…

我的电视 左侧列表内置版 | 非常高清,频道丰富的电视直播应用

我的电视是一款专注于电视直播的应用程序&#xff0c;提供丰富且全面的电视频道&#xff0c;包括央视及各大卫视。无论您是想看新闻、体育、电影还是综艺节目&#xff0c;都可以在这里找到。应用支持高清画质播放&#xff0c;确保流畅无卡顿的观看体验。简洁的界面设计和智能推…

Conmi的正确答案——在Kibana中进入Elasticsearch的索引管理页面

Elasticsearch版本&#xff1a;7.17.25 Kibana版本&#xff1a;7.17.25 注&#xff1a;索引即类似mysql的表。 0、进入首页 1、未创建任何“索引模式”时&#xff1a; 1.1、点击左边的三横菜单&#xff1b; 1.2、点击“Discover”&#xff0c;进入“发现”页面&#xff1b; 2…

在线体验Sketch中文版,免费下载即刻上手!

Sketch是一款轻量而高效的矢量设计工具&#xff0c;助力全球设计师创造了诸多惊艳作品。安装Sketch的优势主要体现在其矢量编辑、控件和样式功能上。而下载安装“Sketch中文版”即时设计同样出色&#xff0c;它作为一站式设计平台&#xff0c;功能更全面。即时设计拥有纯中文的…

aws(学习笔记第九课) 使用AWS的网络存储EBS

aws(学习笔记第九课) 使用AWS的网络存储EBS 学习内容&#xff1a; 使用AWS的网络存储EBS 1.使用AWS的网络存储EBS EBS是什么 EBS是aws Elastic Block Store的缩写&#xff0c;就是AWS的弹性数据块存储。EBS有如下特点。 它不属于EC2的一部分&#xff0c;独立存在。可以独立存…

DAY67WEB 攻防-Java 安全JNDIRMILDAP五大不安全组件RCE 执行不出网

知识点&#xff1a; 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类&#xff1a; Groovy Runti…

11-Python基础编程之错误和异常

Python基础编程之错误和异常 概念错误异常 常见的系统异常异常的解决预防捕捉处理异常with语句 手动抛出异常自定义异常 概念 错误 可以通过代码进行修复&#xff1b; 异常 需要提前考虑&#xff0c;设定限制条件&#xff1b;不能通过代码进行修复&#xff1b; 常见的系…

鸿蒙开发融云demo发送图片消息

鸿蒙开发融云demo发送图片消息 融云鸿蒙版是不带UI的&#xff0c;得自己一步步搭建。 这次讲如何发送图片消息&#xff0c;选择图片&#xff0c;显示图片消息。 还是有点难度的&#xff0c;好好看&#xff0c;好好学。 一、思路&#xff1a; 选择图片用&#xff1a;photoVie…