javascript - 在客户端 JS 网页上使用 require()(browserify 出现“promisify is not a function”错误)
问题描述
我正在尝试创建一个使用 Puppeteer(用于网络抓取的 NodeJS 库)的简单网页。我无法运行我的页面,因为我从 index.html 链接到的 main.js 文件通过 require() 使用 Puppeteer,并且在加载页面时给我一个错误,因为 require() 不能在客户端上使用-边。
我尝试通过使用 Browserify 将我的 main.js 文件与 Puppeteer 依赖项捆绑在一起来解决这个问题,但是当使用 Browserify 新创建的 bundle.js 运行页面时,我在浏览器控制台中收到以下错误:
Uncaught TypeError: promisify is not a function at Object.37.debug (bundle.js:2470) at o (bundle.js:1) at bundle.js:1 at Object.109.../common/Debug.js (bundle.js:14756) at o (bundle.js:1) at bundle.js:1 at Object.<anonymous> (bundle.js:15470) at Object.111.../common/Browser.js (bundle.js:16004) at o (bundle.js:1) at bundle.js:1
我尝试安装 promisify 和 util.promisify 但并没有解决问题。
这些文件是测试它是否有效的超级基本文件,如下所示:
索引.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="./style.css"> <title>Document</title> </head> <body> <h1>My Page</h1> <script src="bundle.js"></script> </body> </html>
main.js
const puppeteer = require('puppeteer'); alert('Hello');
浏览器化命令
browserify main.js -o bundle.js
任何想法为什么它不起作用?
解决方案
Browserify 解决了require
浏览器不支持的问题。
它还允许您使用 npm 和 yarn 之类的工具来管理 JS 包,因为它可以require
像 Node.js 一样使用它们来解决它们。
它不能解决模块的问题,例如puppeteer
,依赖于 Node.js 而不是浏览器提供的 API。您不能在客户端运行 Puppeteer。
推荐阅读
- scala - 为什么我可以在 Future.traverse 的第一个参数中使用 `to`,而不能使用 `until`?
- wordpress - Supsystic 定价表覆盖每月与每年定价的切换
- node.js - 如何抑制 tesseract.js 中的日志
- windows - 操作系统如何改变进程的虚拟基地址?
- group-by - 插入记录时通过选择组合框获取 max(id)+1
- multi-tenant - Quicksight 能否支持使用具有相同数据集和仪表板的不同数据库的多租户?
- javascript - 在firebase中获取集合及其子集合
- java - Android SDK 26 及更高版本中的通知是否支持低于 26 的 SDK?
- python - 如何将文件夹中所有图像的数据转换为csv文件?
- javascript - Fabric js代码不适用于最新版本