Как настроить TS, чтобы разрешить импорт из CJS в модули ES (node-fetch & Express)?

Я пытаюсь запустить две библиотеки в одном проекте: fetch-node, который является модулем ES, и Express, который представляет собой CommonJS. Проблема в том, что я должен импортировать fetch-node вот так:

import fetch from 'node-fetch';

Но Express требует, чтобы я импортировал его так:

const express = require('express')

Что невозможно с моей конфигурацией, package.json: "type": "module", и tsconfig.json:

"target": "es2016",   
"lib": ["es2019"],    
"module": "Node16",    
"esModuleInterop": true,

Поэтому, когда я импортирую Express, как описано, я получаю эту ошибку:

const express = require('express');
                ^

ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and '/mnt/c/Users/Johannes/citygmlToGltf/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
    at file:///mnt/c/Users/Johannes/citygmlToGltf/bin/app.js:15:17
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

Node.js v19.1.0
error Command failed with exit code 1.

В чем здесь хитрость? Могу ли я не использовать эти две библиотеки вместе в одном проекте?

Express не требует использования require, если вы используете модули ES, вы можете import express from "express".

jonrsharpe 18.11.2022 16:22

Хм очень интересно! это правда - теперь это работает. странный. мне пришлось установить типизацию, хотя npm i --save-dev @types/express. Спасибо! но есть ли более общий ответ на мой вопрос - у меня проблема не только с экспрессом;)

Hannes F 18.11.2022 16:26

Тогда не могли бы вы привести минимально воспроизводимый пример проблемы, которая у вас есть?

jonrsharpe 18.11.2022 16:44
[JS за 1 час] - 9. Асинхронный
[JS за 1 час] - 9. Асинхронный
JavaScript является однопоточным, то есть он может обрабатывать только одну задачу за раз. Для обработки длительных задач, таких как сетевые запросы,...
Топ-10 компаний-разработчиков PHP
Топ-10 компаний-разработчиков PHP
Если вы ищете надежных разработчиков PHP рядом с вами, вот список лучших компаний по разработке PHP.
Скраппинг поиска Apple App Store с помощью Python
Скраппинг поиска Apple App Store с помощью Python
📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что...
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
Подъем в javascript
Подъем в javascript
Hoisting - это поведение в JavaScript, при котором переменные и объявления функций автоматически "перемещаются" в верхнюю часть соответствующих...
Улучшение генерации файлов Angular
Улучшение генерации файлов Angular
Angular - это фреймворк. Вы можете создать практически любое приложение без использования сторонних библиотек.
1
3
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема, с которой я столкнулся, возникла из файла tsconfig. Я должен был добавить:

"moduleResolution": "node", 

Чтобы иметь возможность использовать как require(), так и динамический импорт, например import * from "asdf"

Другие вопросы по теме