Как я могу определить, является ли конкретный модуль модулем CommonJS или модулем ES6?

У меня есть функция 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 для проекта, создающего модуль, есть эта строка в compilerOptions:

"module": "commonjs"

Чтобы проверить или исключить проблему ES6 и CommonJS, если я посмотрю на импортированный модуль в каталоге node_modules моей функции Azure, есть ли способ определить, посмотрев на него, является ли это модулем ES6 или CommonJS?

Спасибо!


person Auth Infant    schedule 09.07.2019    source источник
comment
Ознакомьтесь с связанным вопросом stackoverflow.com/questions/42708484/ и ссылка в блоге (medium.com/webpack/) и теперь удаленная документация github.com/nodejs/node-eps/blob/, чтобы узнать, помогает вам. У меня нет времени, чтобы дать правильный ответ, а ответы только по ссылкам неприемлемы, так что это все, что я могу указать вам прямо сейчас.   -  person Joe Frambach    schedule 10.07.2019


Ответы (2)


Найдите пакет npm в папке node_modules и откройте package.json.

Пакет может поддерживать CommonJs и / или ES6, поэтому у вас может быть комбинация.

Вы должны увидеть что-то вроде этого:

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

main обычно указывает на версию CommonJs, а module указывает на версию ESM.

Это общий случай и не всегда так. Иногда завершенный файл может показать вам, поддерживает ли он оба, например index.cjs.js, index.esm.js

person peter.swallow    schedule 28.09.2020

Конфигурация компилятора в импортируемом репозитории не сообщает вам, какой код загружается при установке пакета. Откройте package.json из импортированного пакета и проверьте, на что указывает основное свойство. Затем откройте этот файл, и вы увидите, какой код вы на самом деле получаете. Трансляция кода в любой формат, который автор хочет сделать доступным для пользователей пакета, зависит от публикации пакета.

person Henrik Hansson    schedule 29.01.2020