повторное использование внутренних модулей в веб-интерфейсе - PullRequest
1 голос
/ 27 апреля 2020

У меня есть простое приложение 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

Как я могу решить эту ошибку? или каков правильный способ и наилучшая практика, если таковая имеется, повторно использовать внутренний код из внешнего интерфейса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...