Socket.io-клиент без экспорта по умолчанию - PullRequest
0 голосов
/ 13 сентября 2018

В настоящее время я работаю над проектом на полимере 3, один из компонентов должен импортировать socket.io-client, но что бы я ни пытался, я не могу заставить его работать.

Я пробовал:

import io from 'socket.io-client';

что я получу обратно:

Uncaught SyntaxError: запрошенный модуль «../../node_modules/socket.io-client/lib/index.js» не предоставляет экспорт с именем «по умолчанию»

то же самое для этого:

import io from 'socket.io-client/dist/socket.io.js';

что я получу обратно:

Uncaught SyntaxError: запрошенный модуль «../../node_modules/socket.io-client/dist/socket.io.js» не обеспечить экспорт с именем «по умолчанию»

Я тоже пробовал это:

import * as io from 'socket.io-client'

что я получу обратно:

ReferenceError: require не определен в index.js: 4

и это:

import * as io from 'socket.io-client/dist/socket.io.js'

что я получу обратно:

TypeError: Невозможно прочитать свойство 'Buffer' из неопределенного

Позже я посмотрел код из socket.io-client, и на самом деле в нем не было никаких экспортов es6, которые могли бы объяснить, почему он действительно не работает.

Что я нахожу странным, так это то, что синтаксис импорта даже указан на их сайте как поддерживаемый. Я предполагаю, что я могу использовать неправильную сборку или что-то в этом роде, но я не знаю, почему это будет правдой, так как я использую "socket.io-client": "^2.1.1", если кто-то знает, что я делаю неправильно, я был бы рад услышать.

1 Ответ

0 голосов
/ 06 ноября 2018

Полимер требует использования модулей ES - поскольку socket.io-client не может иметь модуль в package.json (https://github.com/rollup/rollup/wiki/pkg.module), Полимер должен полагаться на источник, который написан с модулями ES. Socket.io-clientне предоставляет ни того, ни другого. Таким образом, вы можете импортировать его только в index.html или в один из ваших шаблонов или использовать другую библиотеку (или сделать что-то безумное с помощью webpack / gulp) ...

index.html

<script src="node_modules/socket.io-client/dist/socket.io.js"></script>

Я импортировал его после импорта веб-компонентов.

В компоненте:

const socket = io(...);

работает.

...