首页 > 解决方案 > TypeError:WooCommerceRestApi 不是构造函数

问题描述

我成功地使用 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)

为什么会这样?

标签: javascriptnode.jswoocommercewoocommerce-rest-api

解决方案


您可能已经解决了这个问题,但我自己也遇到了这个问题,在我看来,esm 加载程序默认为库的 cjs 版本。

这对我有用:

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

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


推荐阅读