我如何判断特定模块是 CommonJS 模块还是 ES6 模块?

How can I tell if a particular module is a CommonJS module or an ES6 module?

我有一个 Azure Function(使用 NodeJS),我试图从中使用另一个团队发布的 npm 模块。在 npm 添加有问题的模块后,我尝试这样使用它:

import * as Model from "@thing/app-model";
...
const appModel: Model.TheModel = new Model.TheModel([]);

但是,当我尝试 运行 Azure 函数时,出现此错误:

[error] Worker was unable to load function pump: 'SyntaxError: Unexpected token export'

我在网上找到的与该错误消息相关的结果表明,此错误通常表示我正在尝试使用 ES6 模块,这是 Node 不支持的(相反,我应该使用 CommonJS 模块) .挑战在于我认为该模块是一个 CommonJS 模块。生成模块的项目的 tsconfig.json 在 compilerOptions 中有这一行:

"module": "commonjs"

为了验证或排除 ES6 与 CommonJS 的问题,如果我在我的 Azure Function 的 node_modules 目录中查看导入的模块,是否有办法通过查看它来判断它是否是 ES6模块还是 CommonJS 模块?

谢谢!

您正在导入的存储库中的编译器配置不会告诉您安装包时下载了哪些代码。从导入的包中打开 package.json 并检查 main 属性 指向的内容。接下来打开该文件,您将看到您实际收到的代码。将代码转换为作者希望提供给包用户的任何格式取决于包的发布。

在 node_modules 文件夹中找到 npm 包,然后打开 package.json

该包可能支持 CommonJs and/or ES6,所以你可能有组合。

你应该看到这样的东西:

  "main": "dist/index.js",
  "module": "dist/my-module.esm.js",

main通常指向CommonJs版本,module指向ESM版本。

这是一般情况,并非总是如此。有时文件结束可以告诉你它是否支持两者,例如index.cjs.jsindex.esm.js