如何确定某个特定模块是CommonJS模块还是ES6模块?

时间:2019-07-09 21:35:30

标签: javascript node.js typescript node-modules es6-modules

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

import * as Model from "@teo/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在compileOptions中具有以下行:

"module": "commonjs"

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

谢谢!

2 个答案:

答案 0 :(得分:1)

在您的node_modules文件夹中找到npm软件包,打开package.json

该软件包可能支持CommonJs和/或ES6,因此您可能会组合使用。

您应该看到类似这样的内容:

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

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

这是一般情况,并不总是如此。有时文件结尾可以显示是否支持这两种文件,例如index.cjs.jsindex.esm.js

答案 1 :(得分:0)

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