Использование загрузчика модуля ESM в узле: `import *` завершается неудачно
Я хочу использовать модуль ES2015 для проекта. Согласно документации узла, я включаю .esm
загрузчик:
~\Code\spa-test $ node --experimental-modules (node:8104) ExperimentalWarning: The ESM module loader is experimental.
> import * as sapper from '@sapper/server'; Thrown:
import * as sapper from '@sapper/server';
^
SyntaxError: Unexpected token *
Я также попробовал:
import {middleware} from '@sapper/server';
Который не с SyntaxError: Unexpected token {
Как мне сделать так, чтобы node.js загружал @sapper/server
Модуль ESM?
1 ответ
Вам нужно сохранить свой код в файле с расширением ".mjs", чтобы пометить его как модуль ES6.
В Node.js V12 также есть переключатель командной строки "--input-type=module"
который может работать в случае интерактивного использования Node.js (REPL).
'@sapper/server'
не является легальным путем к модулю в Node.js. Путь к имени файла модуля либо должен начинаться с '.'
или же '..'
и расширение файла должно быть '.mjs'
таким образом, законное заявление на импорт было бы
import * as sapper from './@sapper/server.mjs';
Когда '@sapper' является не именем файла модуля, а именем пакета, а определение package.json содержит '"type": "module"
', это также должно работать (я еще не проверял это).
См. Также документацию "Модули Node.js V12 ECMAScript" и "Модули Node.js V10 ECMAScript"
Как упомянул @michaeldrehner, это проблема, связанная с Sapper (я отредактировал заголовок, чтобы отразить это).
Моя проблема была
Файлы в
src
являются входными для сапера и не предназначены для непосредственной загрузки узлом.npm build
илиsapper build
будет Rollup сапера * и ( server.js в единый пучок. Этот вывод в `саперных/build/server/server.jsЭтот пакет может быть загружен узлом
node .\__sapper__\build\index.js
без дополнительной магии - пакет преобразуется в соответствующий формат модуля, совместимого с узлами.
Спасибо разработчикам Sapper на Discord за их помощь в ответе на этот вопрос.