Socket.io: Не удается разрешить «uws», обновить README или «package.json»?

Созданный на 17 мая 2018  ·  20Комментарии  ·  Источник: socketio/socket.io

Примечание . Чтобы задать вопросы в службу поддержки, используйте один из следующих каналов: stackoverflow или slack .

Вы хотите:

  • [x] сообщить об ошибке
  • [ ] запросить функцию

Текущее поведение

Я загрузил пример проекта webpack-build-server из главной ветки socket.io, запустил npm install для установки зависимостей и, наконец, запустил npm run build , чтобы попытаться связать сервер, но webpack дает мне следующие ошибки:

ERROR in ./~/engine.io/lib/server.js Module not found: Error: Can't resolve 'uws' in '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/engine.io/lib' @ ./~/engine.io/lib/server.js 107:27-41 @ ./~/engine.io/lib/engine.io.js @ ./~/socket.io/lib/index.js @ ./lib/index.js

Шаги для воспроизведения (если текущее поведение является ошибкой)

  1. Загрузите основную ветку socket.io
  2. Перейти к examples/webpack-build-server ;
  3. Запустить npm install ;
  4. Выполнить npm run build ;

Примечание . Лучший способ получить быстрый ответ — предоставить неудачный тестовый пример, например, разветвив следующую скрипку .

Ожидаемое поведение

Файл server.js должен быть создан в папке dist .

Настраивать

  • ОС: macOS Hight SIerra
  • браузер: сафари
  • версия socket.io: 2.0.3

Другая информация (например, трассировка стека, связанные проблемы, предложения по устранению)

Это то, что напечатано в моем терминале

````

[email protected] build /Пользователи/ZehuaChen/Загрузки/socket.io-master/examples/webpack-build-server
веб-пакет --config ./support/webpack.config.js

Хэш: 997a1fd1ee0b1b064485
Версия: вебпак 2.7.0
Время: 468 мс
Блоки размера активов Имена блоков
server.js 401 КБ 0 [испущено] [большой] основной
[0] ./~/debug/src/index.js 263 байта {0} [встроено]
[7] ./~/socket.io-parser/index.js 8,04 КБ {0} [встроено]
[16] ./~/engine.io/lib/socket.js 11,6 КБ {0} [встроено]
[17] ./~/engine.io/lib/transports/index.js 509 байт {0} [встроено]
[19] ./~/socket.io-parser/is-buffer.js 712 байт {0} [встроено]
[20] ./~/socket.io/lib/namespace.js 5,81 КБ {0} [встроено]
[31] ./~/socket.io/lib/index.js 12,9 КБ {0} [встроено]
[32] ./lib/index.js 474 байта {0} [встроено]
[43] ./~/engine.io/lib/engine.io.js 2,38 КБ {0} [встроено]
[44] ./~/engine.io/lib/server.js 15,1 КБ {0} [встроено]
[58] ./~/socket.io-adapter/index.js 5,44 КБ {0} [встроено]
[59] ./~/socket.io-client/package.json 3,19 КБ {0} [встроено]
[61] ./~/socket.io/lib 160 байт {0} [встроено]
[62] ./~/socket.io/lib/client.js 5,9 КБ {0} [встроено]
[63] ./~/socket.io/lib/parent-namespace.js 917 байт {0} [встроено]
+ 59 скрытых модулей

ПРЕДУПРЕЖДЕНИЕ в ./~/ws/lib/Validation.js
Модуль не найден: ошибка: не удается разрешить «utf-8-validate» в «/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib»
@ ./~/ws/lib/Validation.js 10:22-47
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

ПРЕДУПРЕЖДЕНИЕ в ./~/ws/lib/BufferUtil.js
Модуль не найден: ошибка: не удается разрешить «bufferutil» в «/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib»
@ ./~/ws/lib/BufferUtil.js 35:21-42
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

ПРЕДУПРЕЖДЕНИЕ в ./~/socket.io/lib/index.js
113:11-32 Критическая зависимость: запрос зависимости является выражением

ОШИБКА в ./~/engine.io/lib/server.js
Модуль не найден: ошибка: не удается разрешить «uws» в «/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/engine.io/lib»
@ ./~/engine.io/lib/server.js 107:27-41
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

нпм ОШИБКА! код ELIFECYCLE
нпм ОШИБКА! ошибка 2
нпм ОШИБКА! сборка [email protected] : webpack --config ./support/webpack.config.js
нпм ОШИБКА! Выход из состояния 2
нпм ОШИБКА!
нпм ОШИБКА! Ошибка сценария сборки [email protected] .
нпм ОШИБКА! Вероятно, это не проблема с npm. Вероятно, выше приведен дополнительный вывод журнала.

нпм ОШИБКА! Полный журнал этого запуска можно найти в:
нпм ОШИБКА! /Users/ZehuaChen/.npm/_logs/2018-05-17T21_30_47_624Z-debug.log
````

Обновлять

Я устанавливаю пакет uws вручную, и он работает. Может ли кто-нибудь обновить файл README или package.json, так как новичку вроде меня очень сложно понять это.

Самый полезный комментарий

Так что у меня была такая же проблема, но по совсем другой причине. В настоящее время, когда я устанавливаю последний пакет сервера socket.io из npm, uws не будет найден.

Это происходит потому, что издатель uws недавно загрузил пустой пакет, удалив весь фактический код D:

Вы можете исправить это, установив последний неуничтоженный выпуск.

пряжа добавить [email protected]
npm установить [email protected]

Ссылка на пустой/устаревший пакет: https://www.npmjs.com/package/uws

Проницательная справочная информация с Reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Я собираюсь опубликовать это в первых нескольких результатах, которые появляются при поиске этой проблемы, так как мне потребовалось некоторое время, чтобы понять, в чем дело, и, надеюсь, это сэкономит кому-то время!

Все 20 Комментарий

Я также получаю те же предупреждения:

WARNING in ./~/ws/lib/BufferUtil.js
Module not found: Error: Can't resolve 'bufferutil' in '/Users/Ian/Code/ianpaschal/forge-server/node_modules/ws/lib'
 @ ./~/ws/lib/BufferUtil.js 35:21-42
 @ ./~/ws/lib/Sender.js
 @ ./~/ws/index.js
 @ ./~/engine.io/lib/server.js
 @ ./~/engine.io/lib/engine.io.js
 @ ./~/socket.io/lib/index.js
 @ ./src/server.js

WARNING in ./~/ws/lib/Validation.js
Module not found: Error: Can't resolve 'utf-8-validate' in '/Users/Ian/Code/ianpaschal/forge-server/node_modules/ws/lib'
 @ ./~/ws/lib/Validation.js 10:22-47
 @ ./~/ws/lib/Receiver.js
 @ ./~/ws/index.js
 @ ./~/engine.io/lib/server.js
 @ ./~/engine.io/lib/engine.io.js
 @ ./~/socket.io/lib/index.js
 @ ./src/server.js

WARNING in ./~/socket.io/lib/index.js
113:11-32 Critical dependency: the request of a dependency is an expression
// package.json
"webpack": "^2.7.0",
"socket.io": "^2.1.0",

Вам удалось ее решить? Есть такая же проблема..

Неа. Это всего лишь предупреждение, поэтому нет никакого эффекта, кроме уродливого вывода на консоль, но он все еще там.

Это не останавливает вас от npm start , просто игнорируйте ошибку.

Если вы компилируете только для узла , вы должны добавить опцию, после чего ошибка исчезнет.
Вы должны добавить в свой файл конфигурации:

{
        ...
        target: 'node'
       ...
}

В противном случае вы компилируете только для Интернета , тогда никакие параметры не нужно передавать (по умолчанию = 'веб') (или цель = 'веб'), но вы должны исключить uws из пакета, так как он не работает в браузер.
В этом случае лучше добавить:

{
        ...
        externals: {
            uws: "uws"
        },
       ...
}

@pirix-gh Проблема не в этом.

Из моей конфигурации:

const Webpack = require( "webpack" );

module.exports = {
    target: "node",
    node: {
        __dirname: true,
        __filename: true,
    },
    entry: {
        main: "./src/server.js",
    },
    plugins: [
        new Webpack.EnvironmentPlugin( [
            "NODE_ENV",
        ] ),
        new Webpack.IgnorePlugin( /uws/ )
    ],
};

@ianpaschal Хорошо, тогда, может быть, вы импортируете проект в другой?

_Проект_1_

  • Index.js: импорт _Socket.IO_

_Проект_2_

  • Index.js: Импорт _Project_1_

Webpack: компилировать Project_2
-> Модуль не найден в Project_2

И это может произойти из-за того, что зависимость просматривается в Project_2, но Project_1 ее удерживает.
Решением этой проблемы является установка отсутствующей зависимости, как вы это сделали.
Или опубликуйте свой Project_1, а затем импортируйте его как зависимость в Project_2.

Делая это, я могу воспроизвести ошибки, которые вы указали выше.

Спасибо, что объяснили, почему что-то пошло не так, и предложили альтернативный подход!

@ Zehua-Chen Удовольствие, надеюсь, это решило вашу проблему. Я знаю, как раздражает публиковать все время, поэтому... Для этого случая разделенных проектов вы можете использовать во время разработки:

npx @babel/node src/index.js или
node -r @babel/register src/index.js

или в зависимости от вашей версии

npx babel-node src/index.js или
node -r babel-register src/index.js

Он правильно разрешит зависимости и запустится , но помните, что он не подходит для производства.
Если вы работаете в производстве, вам следует публиковать свои пакеты отдельно и вместо этого использовать npm.

Я провел много исследований сейчас и до сих пор не понял проблему и как ее решить.
У меня есть один проект , использующий socket.io и сборку с помощью веб-пакета, всегда терпит неудачу с одной и той же проблемой.

ERROR in ./node_modules/engine.io/lib/server.js
Module not found: Error: Can't resolve 'uws' in 'xxxxxxxx/node_modules/engine.io/lib'
 @ ./node_modules/engine.io/lib/server.js 107:27-41
 @ ./node_modules/engine.io/lib/engine.io.js
 @ ./node_modules/socket.io/lib/index.js

пакет.json

"dependencies": {
      "express": "^4.16.3",
      "socket.io": "^2.1.1"
   },
   "devDependencies": {
      "tslint": "^5.11.0",
      "typescript": "2.9.2",
      "uglifyjs-webpack-plugin": "^1.2.7",
      "webpack": "^4.16.4",
      "webpack-cli": "^3.1.0"
   },

webpack.config.js

const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {
   target: 'node',
   mode: 'development',
   entry: './dist/index.js',
   output: {
      filename: 'index.js',
      path: path.resolve(__dirname, 'dist/00-bundle')
   },
   optimization: {
      minimizer: [
         new UglifyJsPlugin()
      ]
   }
};

@btxtiger это потому, что вы не должны связывать свои зависимости при работе с узлом (будет установлен с package.json). Это поведение по умолчанию для webpack , потому что он связывает ваш проект для Интернета .

Добавьте это в свой конфиг, он исключит ваши зависимости , прочитав ваш package.json

const nodeExternals = require('webpack-node-externals');

module.exports = {
...
mode: 'development',
...
externals: [nodeExternals({
               modulesFromFile: true
          })];
...
}

Таким образом вы получите (почти) готовый к публикации пакет.

@pirix-gh Спасибо! Хорошо, это имеет смысл. Я надеялся, что смогу создать полный пакет, который просто нужно отправить на сервер без необходимости установки/обновления модулей через package.json. Я до сих пор не уверен, что это действительно невозможно, за исключением той ошибки с socket.io, которая, кажется, работает.

@btxtiger Вы можете сделать это локально. Просто не публикуйте его в NPM, так как это нарушает правила зависимости.
uws компилируется на лету при использовании npm i , потому что это модуль C++, завернутый в Node.js.
Таким образом, он не может быть связан, как стандартный js, и должен быть установлен (что запускает компиляцию для вашей ОС).
Вот почему вы всегда должны использовать систему зависимостей NPM , тогда вам не нужно задавать себе этот вопрос.

Если вы все еще хотите это сделать, попробуйте исключить uws:

{
        ...
        externals: {
            uws: "uws"
        },
       ...
}

@pirix-gh Отлично, большое спасибо за объяснение. Я перешел на оптимизированный package.json, который исключает все зависимости разработчиков при сборке с помощью веб-пакета и всегда запускает npm install перед запуском. Кажется, это лучшее решение на данный момент.

У меня не было времени полностью его отладить, но при обновлении с karma^2.0.0 до karma^3.0.0 я получил эту ошибку в своей сборке веб-пакета:

Module not found: Error: Can't resolve 'uws'

Так что сохранение кармы на 2.0.0 было для меня решением.

Я получаю эту проблему всякий раз, когда я импортирую или требую socket.io. Я пытался вручную установить uws, но Node по-прежнему не может разрешить uws.

У меня тоже такая проблема, не знаю как решить.

Пользователи Webpack/front-end, если вам просто нужен SocketIO в клиентском приложении для подключения к какому-либо серверу WebSocket, вы можете просто использовать это: https://github.com/socketio/socket.io-client

Решил мою проблему Module not found: Error: Can't resolve 'uws' !

Так что у меня была такая же проблема, но по совсем другой причине. В настоящее время, когда я устанавливаю последний пакет сервера socket.io из npm, uws не будет найден.

Это происходит потому, что издатель uws недавно загрузил пустой пакет, удалив весь фактический код D:

Вы можете исправить это, установив последний неуничтоженный выпуск.

пряжа добавить [email protected]
npm установить [email protected]

Ссылка на пустой/устаревший пакет: https://www.npmjs.com/package/uws

Проницательная справочная информация с Reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Я собираюсь опубликовать это в первых нескольких результатах, которые появляются при поиске этой проблемы, так как мне потребовалось некоторое время, чтобы понять, в чем дело, и, надеюсь, это сэкономит кому-то время!

Для меня --target node через интерфейс командной строки или конфигурацию было ключом и решило все мои проблемы.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги