У меня есть простое приложение express, с модулем сервера и некоторым клиентским кодом.
Исходные файлы моего приложения изначально были организованы в две директории (упрощенно):
│ package.json
│ readme.md
│
├───client
│ client.js
│ index.html
│
└───server
server.js
colors.js
Цветовой модуль (server/colors.js
), для смысла этого вопроса SO, является общим * Модуль 1050 *, который экспортирует одно значение
const color = "white";
module.exports = { color };
server/server.js
, содержит приложение express, которое, помимо прочего, использует цвет, определенный в модуле, и использует промежуточное ПО express.static
для обслуживания файлы в каталоге client
.
const color = require('./colors').color;
...
app.use(express.static(path.join(__dirname , '..', 'client')));
Код клиента вставляется в <head>
из index.html
как модуль
<script defer src="client.js" type="module"></script>
Пока все хорошо, сервер запускается, передает из клиентского каталога все клиентские файлы, смонтированные по его маршруту root.
Теперь я хочу повторно использовать модуль цветов сервера также из моего клиентского кода.
Итак, я создаю новый каталог shared
и перемещаю туда исходный файл colors.js
.
│ package.json
│ readme.md
│
├───client
│ client.js
│ index.html
│
├───server
│ server.js
│
└───shared
colors.js
Затем я изменяю свой server.js
на импорт из нового местоположения
const color = require('../shared/colors').color;
и, чтобы повторно использовать его в клиенте, я добавляю виртуальный путь на сервере, монтирование нового express.static()
пути
app.use('/shared',express.static(path.join(__dirname , '..', 'shared')));
пока все хорошо, серверу требуется модуль, и он обслуживает как клиентские, так и общие каталоги.
Теперь, чтобы использовать модуль в клиент, я импортирую colors
в client.js
import * as colors from './shared/colors.js';
, но браузер выдает ошибку ReferenceError: module is not defined
Как я могу решить эту ошибку? или каков правильный способ и наилучшая практика, если таковая имеется, повторно использовать внутренний код из внешнего интерфейса?