类型错误:WooCommerceRestApi不是一个构造函数。

4

我曾经使用 NPM @woocommerce/woocommerce-rest-api,成功地管理了对 Woocommerce/WP 网站的 API 请求。

当时使用的是 Babel 和 CJS 版本:

const WooCommerceRestApi = require("@woocommerce/woocommerce-rest-api").default;

const api = new WooCommerceRestApi({
  url: "http://example.com",
  consumerKey: "ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  consumerSecret: "cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  version: "wc/v3"
});

但自从Node 14提供了一种简单的使用ESM的方式后,我已经将以下配置添加到package.json中,以便我可以使用import语句:

"type": "module"

因此,我应该能够使用以下格式:

import WooCommerceRestApi from "@woocommerce/woocommerce-rest-api";

const api = new WooCommerceRestApi({
  url: "http://example.com",
  consumerKey: "ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  consumerSecret: "cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  version: "wc/v3"
});

但现在我遇到了这个错误:

file:///xxxxxx/test.js:5
const api = new WooCommerceRestApi({
            ^

TypeError: WooCommerceRestApi is not a constructor
    at file:///xxxxxxxx/test.js:5:13
    at ModuleJob.run (internal/modules/esm/module_job.js:138:23)
    at async Loader.import (internal/modules/esm/loader.js:178:24)

为什么会发生这种情况?
1个回答

16

也许您已经解决了这个问题,但我自己遇到了这个问题,看起来像是esm加载器默认使用库的cjs版本。

对我来说,这个方法有效:

import pkg from '@woocommerce/woocommerce-rest-api';
const WooCommerceRestApi = pkg.default;

是的,这不是一个完美的解决方案,但它可能对其他人有所帮助或激发某人进一步解释。 ;)


已确认可行。应将其标记为解决方案,似乎是文档存在问题。 - janithcooray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接