Socket.io: لا يمكن حل 'uws' أو تحديث README أو "package.json"؟

تم إنشاؤها على ١٧ مايو ٢٠١٨  ·  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

معلومات أخرى (مثل stacktraces والمشكلات ذات الصلة واقتراحات كيفية الإصلاح)

هذه هي ما تم طباعته في محطتي

""

[email protected] build /sers/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server
حزمة الويب --config ./support/webpack.config.js

تجزئة: 997a1fd1ee0b1b064485
الإصدار: webpack 2.7.0
الوقت: 468 مللي ثانية
أسماء قطع حجم الأصول
server.js 401 kB 0 [مصدر] [كبير] main
[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" في "/ المستخدمون/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
لم يتم العثور على الوحدة النمطية: خطأ: لا يمكن حل "المخزن المؤقت" في "/ المستخدمون/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' في '/ المستخدمون/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

npm خطأ! كود ELIFECYCLE
npm خطأ! يخطئ 2
npm خطأ! [email protected] build: webpack --config ./support/webpack.config.js
npm خطأ! حالة الخروج 2
npm خطأ!
npm خطأ! فشل في [email protected] build script.
npm خطأ! ربما لا تكون هذه مشكلة في npm. من المحتمل أن يكون هناك مخرجات تسجيل إضافية أعلاه.

npm خطأ! يمكن العثور على سجل كامل لهذا التشغيل في:
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_

حزمة الويب: ترجمة Project_2
-> الوحدة غير موجودة في Project_2

وقد يحدث هذا بسبب البحث عن التبعية في Project_2 ولكن Project_1 يحتفظ بها.
حل هذا هو إما تثبيت التبعية المفقودة كما فعلت.
أو انشر Project_1 الخاص بك ثم قم باستيراده كعنصر تابع إلى Project_2.

من خلال القيام بذلك ، يمكنني إعادة إنتاج الأخطاء التي قدمتها أعلاه

نشكرك على شرح سبب حدوث خطأ ، وتقديم طريقة بديلة!

@ Zehua-Chen Pleasure ، آمل أن يتم إصلاح مشكلتك. أعلم كم يمكن أن يكون النشر طوال الوقت مزعجًا ، لذا ... بالنسبة لهذه الحالة الخاصة بالمشاريع المنقسمة ، يمكنك استخدام:

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

package.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 ، لأنه يجمع مشروعك للويب .

أضف هذا إلى conf الخاص بك ، وسوف يستبعد تبعياتك من خلال قراءة 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 القياسية ويجب بدلاً من ذلك تثبيتها (مما يؤدي إلى تشغيل compiliaton لنظام التشغيل الخاص بك).
لهذا السبب يجب عليك دائمًا استخدام نظام التبعية NPM ، فلا داعي لطرح هذا السؤال على نفسك.

إذا كنت لا تزال ترغب في القيام بذلك ، فحاول استبعاد uws:

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

@ pirix-gh عظيم ، شكرًا جزيلاً على الشرح. انتقلت إلى package.json مُحسَّن يستبعد جميع تبعيات مطور البرامج أثناء البناء باستخدام حزمة الويب ، ويقوم دائمًا بتشغيل تثبيت npm قبل البدء. يبدو أنه أفضل حل في الوقت الحالي.

لم يكن لدي الوقت الكافي لتصحيحه بالكامل ، ولكن عند الترقية من karma^2.0.0 إلى karma^3.0.0 حصلت على هذا الخطأ في إصدار webpack الخاص بي:

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

لذا فإن إبقاء Karma عند 2.0.0 هو الحل بالنسبة لي.

أتلقى هذه المشكلة كلما قمت باستيراد أو طلب socket.io. لقد حاولت تثبيت uws يدويًا ولا يزال Node غير قادر على حل uws.

أتلقى هذه المشكلة أيضًا ، ولا أعرف كيفية حلها.

Webpack / الأشخاص ذوو الواجهة الأمامية ، إذا كنت تحتاج فقط إلى 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 عبر CLI أو config هو المفتاح وحل جميع مشاكلي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات