выберите файл commonjs при запуске под управлением commonjs зависимости при запуске nodemon

#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'