Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

创建实例时候 报错 TypeError: (0 , x_crawl_1.default) is not a function #89

Closed
618457 opened this issue Mar 9, 2024 · 16 comments
Labels
bug Something isn't working

Comments

@618457
Copy link

618457 commented Mar 9, 2024

Bug 预期

执行爬虫实例化时
const myXCrawl = xCrawl();

报错

TypeError: (0 , x_crawl_1.default) is not a function

最小可重复的例子

import xCrawl from 'x-crawl';

  async crawl(path: string) {
    // 2.创建一个爬虫实例
    const myXCrawl = xCrawl();
    myXCrawl.crawlPage(path).then(res => {
      const { browser, page } = res.data;
      console.log(page);
      // 关闭浏览器
      browser.close();
    });
  }

报错信息

ERROR 389 TypeError: (0 , x_crawl_1.default) is not a function

x-crawl 版本

8.3.1

Node 版本

16.19.1

包管理器

npm

包管理器版本

9.6.1

@618457 618457 added the bug Something isn't working label Mar 9, 2024
Copy link

github-actions bot commented Mar 9, 2024

Message that will be displayed on users' first issue

@coder-hxl
Copy link
Owner

你好,请打印一下 xCrawl 看看是否存在

@wencaizhang
Copy link

wencaizhang commented Apr 19, 2024

@coder-hxl 你好,我也遇到了同样的问题,我是引入到 nestjs 项目中出现这个情况的,这里有一个复现仓库:

https://github.com/wencaizhang/nestjs-crawl-bug-demo

  • Node 版本:v20.10.0
  • pnpm 版本:8.11.0
  • x-crawl:^10.0.1

@coder-hxl
Copy link
Owner

coder-hxl commented Apr 19, 2024

@wencaizhang 建议提个新的 Issues ,新版改动还是蛮大的,我先克隆下来试试

@coder-hxl
Copy link
Owner

@wencaizhang V10 版本已经不再支持 CJS ,只能使用 ESM ,https://github.com/coder-hxl/x-crawl/releases/tag/v10.0.0
image

@wencaizhang
Copy link

@wencaizhang V10 版本已经不再支持 CJS ,只能使用 ESM ,https://github.com/coder-hxl/x-crawl/releases/tag/v10.0.0 image

这个项目是支持 ESM 的,例如 import { log } from '../utils'; 按照 ESM 写法都是正常的。

但是具体到 x-crawl 我怎么写都不对。

@coder-hxl
Copy link
Owner

@wencaizhang 最终打包是变成 CJS 的,可以看看 dist 目录下的文件
image

@wencaizhang
Copy link

明白了,我的理解是现在 nestjs 中虽然是 ESM 写法:

import { createCrawl } from 'x-crawl';

但是实际仍然请求了 x-crawl 的 CJS 模块:
image
而这个模块只输出一个警告信息。

所以真正的问题应该是如何让 nestjs 引入 x-crawl 的 ESM 模块了。

@coder-hxl
Copy link
Owner

@wencaizhang 对的,可以给 package.json 添加 "type": "module",tsconfig.json 添加 "module": "ESNext", "moduleResolution": "Bundler",

@Xyn19961118
Copy link

@wencaizhang 对的,可以给package.json添加,"type": "module"tsconfig.json添加"module": "ESNext",,"moduleResolution": "Bundler"

按照这个设置也不行

@coder-hxl
Copy link
Owner

@Xyn19961118 如果用的是 nestjs ,就得让 nestjs 打包变成 ESM ,可以去看看 nestjs 有没有对应的配置

@KinoshitaHanson
Copy link

看来使用nestjs就用不了这个库了,可惜了

@wencaizhang
Copy link

wencaizhang commented Dec 27, 2024

看来使用nestjs就用不了这个库了,可惜了

可以在 nestjs 中使用。

实际上这个问题最终已经解决了,不过忘记把解决方案贴出来了。

image

代码位置:https://github.com/wencaizhang/nestjs-crawl-bug-demo/blob/main/src/crawler/crawler.service.ts#L15-L18

@KinoshitaHanson
Copy link

看来使用nestjs就用不了这个库了,可惜了

可以在 nestjs 中使用。

实际上这个问题最终已经解决了,不过忘记把解决方案贴出来了。

image 代码位置:https://github.com/wencaizhang/nestjs-crawl-bug-demo/blob/main/src/crawler/crawler.service.ts#L15-L18

试了一下成功了,感谢。 我尝试过使用动态import,但是忘记直接写import(),也会被编译成cjs。

@koala0x
Copy link

koala0x commented Jan 9, 2025

打包变成 ESM ,可以去看看 nestjs 有

你能贴下你解决的代码么, 谢谢~

@coder-hxl coder-hxl pinned this issue Jan 10, 2025
@coder-hxl
Copy link
Owner

看来使用nestjs就用不了这个库了,可惜了

可以在 nestjs 中使用。

实际上这个问题最终已经解决了,不过忘记把解决方案贴出来了。

图像 代码位置:https://github.com/wencaizhang/nestjs-crawl-bug-demo/blob/main/src/crawler/crawler.service.ts#L15-L18

@koala0x 试试这个

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

6 participants