Как включить общий модуль js в приложение узла модуля ES6? - PullRequest
2 голосов
/ 01 мая 2020

У меня есть приложение-нод, которое я хотел бы использовать в стандартном формате модуля ES6 (т. Е. "type": "module" в package.json и с использованием import и export во всем) не опускаясь до ES5. Но я хотел бы воспользоваться некоторыми более старыми библиотеками, такими как express и socket.io, которые используют общий формат JS / require. Каковы мои варианты (по состоянию на 5/2020, узел 12.16.3) для объединения модулей Common JS в приложение ES6?

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

Работа с модулями Common JS довольно проста. Вы можете выполнять default экспорт только из общих JS модулей.

import packageMain from 'commonjs-package'; // Works
import { method } from 'commonjs-package'; // Errors

Это означает, что все общие экспорты js будут жить на объекте packageMain, и вам нужно точка в объект packageMain, чтобы получить то, что вам нужно.

packageMain.method1()

Дополнительная информация в официальном nodejs документе

1 голос
/ 03 мая 2020

Убедитесь, что у рассматриваемого модуля есть index.js, который экспортирует нужный код в import или require.

. В package.json под атрибутом dependencies добавьте следующее:

"myCustomModule":"file:./path/to/myCustomModule"

После того, как вы сделали это, запустите npm install.

Как только это будет завершено, загляните внутрь node_modules проекта root, и вы увидите каталог с именем myCustonModule.

Теперь в любом файле проекта вы можете import или require этот код, как и любой другой n mode_module

0 голосов
/ 08 мая 2020

Ответ Ивана полезен, но я также должен отметить, что, поскольку я использовал узел 12.16.3, мне также нужно было добавить флаг --experimental-modules в мой стартовый скрипт в package.json:

"type": "module",
"scripts": {
    "start": "node --experimental-modules --experimental-json-modules server.mjs",
}
  • "type": "module" сообщает узлу, что вы должны использовать модули ES6
  • имя файла .mjs, далее дает понять, что мы работаем с модулем JavaScript file
  • --experimental-modules и --experimental-json-modules позволяют использовать import в версии узла 12.

Тогда я смог сделать что-то вроде import express from 'express'; (где express 4.17.1 - это Common JS модуль), и он работал нормально.

...