首页 > 解决方案 > 在客户端 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

任何想法为什么它不起作用?

标签: javascriptnode.jspuppeteerbrowserify

解决方案


Browserify 解决了require浏览器不支持的问题。

它还允许您使用 npm 和 yarn 之类的工具来管理 JS 包,因为它可以require像 Node.js 一样使用它们来解决它们。

它不能解决模块的问题,例如puppeteer,依赖于 Node.js 而不是浏览器提供的 API。您不能在客户端运行 Puppeteer。


推荐阅读