#node.js #nodemon
#node.js #нодемон
Вопрос:
Я запускаю узел 14.
У меня есть пакет, который содержит это в package.json
"main": "dist/index.js",
"type": "commonjs",
Нет полей браузера или модуля.
Это проект typescript, который я компилирую для .cjs
вывода.
Проблема в том, что когда я запускаю nodemon таким образом:
nodemon --watch 'src/**/*' -e ts,tsx --exec ts-node ./src/index.ts
Я получаю эту ошибку:
Ошибка [ERR_REQUIRE_ESM]: необходимо использовать импорт для загрузки модуля ES: /Users/blah/dist/index.js
Рассматриваемый модуль имеет module
«основной and
fields but its type is
модуль браузера`.
В нем есть index.js
index.cjs
файлы и, но index.js
выбирается файл.
все в порядке, когда я запускаю скомпилированный вывод, который является .cjs
файлом.
Есть ли способ сообщить node, что я хочу, чтобы все работало под commonjs.
Комментарии:
1. Если мой ответ вам не подходит, не могли бы вы, пожалуйста, доказать, что вы MVP.
Ответ №1:
Я не думаю, что есть способ заставить узел делать то, что вы хотите. У меня было подобное, когда основным проектом был commonjs, но одной из библиотек была esm или библиотека, которую он использовал, была esm. Я не помню конкретных деталей, но это была настоящая боль.
Основная работа заключается в использовании esm
import
библиотеки, вызывающей проблему. Вероятно, как только вы это сделаете, у вас возникнет второй уровень проблем.
// example
const esmImport = require('esm')(module)
const {CookieJar, fetch} = esmImport('node-fetch-cookies')
Динамический импорт также решил проблему для меня.
async init() {
const { CookieJar } = await import('node-fetch-cookies')
this.cookieJar = new CookieJar()
this.cookieJar.addCookie(`username=${this._user}`, this._url.toString())
this.cookieJar.addCookie('hippa=yes', this._url.toString())
}
Ответ №2:
У меня была такая же проблема, и я использовал одинарные кавычки для многозначных аргументов, таких как `—exec’, чтобы решить ее.
nodemon --watch 'src/**/*' -e ts,tsx --exec 'ts-node ./src/index.ts'