在客户端JS网页上使用requirebrowserify出现“ promisify不是函数”错误

问题描述

我正在尝试创建一个使用Puppeteer(用于Web抓取的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,但无法解决问题。

这些文件是超级基本的文件,用于测试其是否正常工作,看起来像这样:

index.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软件包,因为它可以像Node.js一样使用require来解析它们。

它不能解决puppeteer之类的模块问题,具体取决于Node.js(而非浏览器)提供的API。您无法在客户端运行Puppeteer。