Узел --experimental-modules - Ошибка: не удается найти модуль - PullRequest
0 голосов
/ 23 июня 2019

Я получаю сообщение об ошибке при попытке импортировать локальный файл, хотя нет проблем при использовании пакетов npm.

server.js

import express from 'express'
import next from 'next'

import apis from './src/server/api'

api.js

export default {
  ello: 'bye',
  jamie: 'hey'
}

Запуск приложения

node --experimental-modules --inspect server.js

Error

For help, see: https://nodejs.org/en/docs/inspector
(node:20153) ExperimentalWarning: The ESM module loader is experimental.
internal/modules/esm/default_resolve.js:59
  let url = moduleWrapResolve(specifier, parentURL);
            ^

Error: Cannot find module '/var/www/goldendemon.hutber.com/src/server/api' imported from /var/www/goldendemon.hutber.com/server.js
    at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:59:13)
    at Loader.resolve (internal/modules/esm/loader.js:70:33)
    at Loader.getModuleJob (internal/modules/esm/loader.js:143:40)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:43:40)
    at link (internal/modules/esm/module_job.js:42:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Это также должно работать, если вы называете файл вашего модуля расширением .mjs. Также упоминаются другие способы включения ESM здесь .

Node.js будет обрабатывать следующие объекты как модули ES, когда они передаются на узел в качестве начального ввода или когда на них ссылаются операторы импорта в коде модуля ES:

  • Файлы, заканчивающиеся на .mjs.

  • Файлы, оканчивающиеся на .js, или файлы без расширений, если ближайший родительский файл package.json содержит поле верхнего уровня «type» со значением «module».

  • Строки, передаваемые в качестве аргумента --eval или --print, или передаются на узел через STDIN с флагом --input-type = module.

0 голосов
/ 23 июня 2019

Я отвечаю на свой вопрос, если у кого-то еще есть эта проблема.

Оказывается, в экспериментальной модели вам нужно определить полный путь с расширением.Поэтому я пытаюсь импортировать index.js, думая, что он узнает.

Чтобы исправить это:

import express from 'express'
import next from 'next'
import api from './src/server/api/index.js'
...