我最近把crawlee3.0.2添加到一个项目中,这个项目使用标准的 puppet 师设置(有没有 puppet 师额外/隐形)已经运行了几个月了。
在VS代码中调试和运行npm start
时,一切都运行良好,但编译后我遇到了一个问题:
Unhandled Exception - Error: Cannot find module 'puppeteer'
我已跟踪此问题,错误似乎来自:
@crawlee\ puppet 师\内部\ puppet 师-发射器.js -第18行:
const { launcher = browser_1.BrowserLauncher.requireLauncherOrThrow('puppeteer', 'apify/actor-node-puppeteer-chrome'), ...browserLauncherOptions }
我不知道如何让crawlee看到安装在项目中的 puppet 师模块。
我不确定这是否相关,但在构建期间,我曾尝试使用WebpackObfuscator和来自已编译ASAR的解包puppeteer,主包.json中有一行:
"build": {
"asar": true,
"asarUnpack": [
"**\\*.{node,dll}",
"node_modules/puppeteer/.local-chromium/**/*"
],
型
以及
"extraResources": [
"./assets/**",
"node_modules/puppeteer"
],
我放弃了尝试使用模糊器,但发现为puppeteer传递exectuablePath效果很好,所以我就保持原样(我现在不记得模糊器是否是我最初这样做的唯一原因-我想是为了我可以用打包的chromium分发)。
我注意到了一些奇怪的差异(我对Electron/Node还是个新手,所以请原谅我的无知):
crawlee的package.json列出了puppeteer的依赖项,如下所示:
"peerDependencies": {
"playwright": "^1.21.1",
"puppeteer": ">= 9.x <= 14.x"
},
"peerDependenciesMeta": {
"playwright": {
"optional": true
},
"puppeteer": {
"optional": true
}
}
在添加crawlee之前,我使用的是一个独立的puppeteer安装,我相信它比14. x更新,但它仍然在我在构建和测试时已经添加的版本中运行良好。
我尝试安装puppeteer v14(降级),它将主项目package.json更新为
"puppeteer": "^14.4.1",
但是这也没有解决问题,但是,当运行npm view puppeteer version
时,不管package.json显示什么,它都显示16.1.0,所以我不能弄清楚实际问题在哪里。
任何关于如何让crawlee在编译版本上看到puppeteer包的建议都将非常感谢。
1条答案
按热度按时间zzoitvuj1#
我找到了一个修复方法,确保在webpack中包含依赖项作为外部项,并在package.json中将相对于package.json的node_modules路径声明为“extraResource”。