在 Vue + Webpack 中使用 Puppeteer (Headless Chrome) 时出现依赖错误

Dependency errors when using Puppeteer (Headless Chrome) with Vue + Webpack

我正在使用这两个 libraries/templates:

https://github.com/GoogleChrome/puppeteer(无头Chrome)

https://github.com/vuejs-templates/pwa(使用 Webpack 和 Express 的 Vue 模板)。

这是代码:

export default {
  mounted () {
    const puppeteer = require('puppeteer')

    ;(async () => {
      const browser = await puppeteer.launch()
      const page = await browser.newPage()
      await page.goto('https://www.google.com/search?tbm=bks&q=%22this+is%22')
      const result = await page.evaluate(() => {
        const stats = document.querySelector('#resultStats')
        return stats.textContent
      })
      console.log(result)
      await browser.close()
    })()
  }
}

我做了很多次npm install,但我仍然有依赖错误:

These dependencies were not found:

  • child_process in ./node_modules/puppeteer/lib/Launcher.js, ./node_modules/puppeteer/node6/Launcher.js
  • fs in ./node_modules/extract-zip/index.js, ./node_modules/extract-zip/node_modules/mkdirp/index.js and 18 others

To install them, you can run: npm install --save child_process fs Listening at http://localhost:8080

节点:我也做了很多次npm install --save child_process fs。同样的错误。

这似乎是 webpack 对内置节点模块的抱怨。尝试将以下内容添加到您的 webpack 配置中...

target: 'node'

from the webpack docs...

In the example above, using node webpack will compile for usage in a Node.js-like environment (uses Node.js require to load chunks and not touch any built in modules like fs or path).


或者,您可以使用以下方法解决此问题...

node: {
  fs: 'empty',
  child_process: 'empty'
}

您是否尝试捆绑 puppeteer 以便在浏览器中使用?这是一个特定于节点的模块,我怀疑它能否在前端运行。相反,您可能会尝试了解为什么要捆绑此文件,以及您是否打算这样做。