javascript - شرح - express sport




المتغيرات العالمية node.js؟ (5)

أوافق على أن استخدام مساحة الاسم العالمية / GLOBAL لإعداد أي شيء عالمي هو ممارسة سيئة ولا تستخدمها نظريًا على الإطلاق (من الناحية النظرية كونها الكلمة المنطوقة). ومع ذلك (نعم ، المنطوق) أستخدمه في إعداد فئات الخطأ المخصصة:

// Some global/config file that gets called in initialisation

global.MyError = [Function of MyError];

نعم ، من المحرمات هنا ، ولكن إذا كان موقعك / مشروعك يستخدم أخطاء مخصصة في جميع أنحاء المكان ، فستحتاج في الأساس إلى تعريفه في كل مكان ، أو على الأقل في مكان ما:

  1. تعريف فئة الخطأ في المقام الأول
  2. في البرنامج النصي حيث كنت رميها
  3. في النص البرمجي حيث يتم التقاطه

يؤدي تحديد أعمالي المخصصة في مساحة الاسم العامة إلى تفادي مشاحنات طلب مكتبة أخطاء عميلي. التصوير يرمي إلى خطأ مخصص حيث يكون هذا الخطأ المخصص غير معروف.

وأيضًا أيضًا ، إذا كان هذا خطأً ، فالرجاء إخباري بأني قد بدأت للتو في فعل ذلك مؤخرًا

سألت هنا: node.js تتطلب الميراث؟

وقيل لي أنه يمكنني وضع المتغيرات على النطاق العالمي من خلال ترك فار.

هذا لا يعمل بالنسبة لي.

أي:

_ = require('underscore');

لا يجعل _ المتاحة على الملفات المطلوبة. يمكنني تعيين مع app.set صريح app.set متوفرة في مكان آخر رغم ذلك.

هل يمكن لشخص أن يؤكد أن هذا من المفترض أن يعمل؟ شكر.


الحلول الأخرى التي تستخدم الكلمة الرئيسية GLOBAL هي كابوس للحفاظ على / قراءة (+ تلوث مساحة الاسم والبق) عندما يكبر المشروع. لقد رأيت هذا الخطأ مرات عديدة وكان من الازعاج من إصلاحه.

استخدم ملف JS ثم استخدم تصدير الوحدة النمطية.

مثال:

globals.js

var Globals = {
    'domain':'www.MrGlobal.com';
}

module.exports = Globals;

ثم إذا كنت ترغب في استخدام هذه ، استخدم تتطلب.

var globals = require('globals'); //<< globals.js path
globals.domain //<< Domain.

ماذا عن مساحة اسم عمومية مثل global.MYAPI = {}

global.MYAPI._ = require('underscore')

تحرير بعد تعليق camilo-martin : كل ​​الملصقات الأخرى تتحدث عن النمط السيئ المتضمن. إذا تركنا هذه المناقشة جانباً ، فإن أفضل طريقة للحصول على متغير مُحدد عالمياً (سؤال OP) هو عبر مساحات الأسماء.

tip: http://thanpol.as/javascript/development-using-namespaces/


يمكنك فقط استخدام الكائن العمومي.

var X = ['a', 'b', 'c'];
global.x = X;

console.log(x);
//['a', 'b', 'c']

global._ = require('underscore');

لاحظ أن استخدام GLOBAL تم إيقافه:

(node:59502) DeprecationWarning: 'GLOBAL' is deprecated, use 'global'

تعليقي:

إذا كنت تعرف ما تفعله ، أعتقد أنه من الأفضل استخدام عالمي. عندما أحتاج إلى طلب بعض المكتبات في كل مرة أرغب في استخدامها (ودعنا نقول إنني استخدمتها في عشرات أو مئات الملفات) أعتقد أنها تدمر النقطة الرئيسية للكثير من المكتبات التي تكون سهلة وسريعة للاستخدام. لماذا يتم تسميته _ ، ليس amazingLibraryCalledUnderscore ؟

بالنسبة لي ، تحتاج إلى كتابة 30 حرف من var _ = require('underscore'); هو 3000% أكثر من الحد الأدنى المطلوب (1 حرف). نعم فعلا. أنا مهووس حول جعل حياتي أسهل عند كتابة الرمز. أنا فقط أكره تكرار الأشياء الواضحة. إذا قلت مرة لعقدة ما أقصده I want you to know _ means I use underscore لا أريد أن أقوله مرة أخرى.

لذا - أعتقد أنه عندما تتحكم في شفرتك ، يجب أن تحاول جعلها مثيرة . أعتقد أن كتابة 30 حرفًا في كل مرة للقيام بهذا الشيء البسيط هو قبيح!

فرع فلسطين. أن تثق بنفسك عندما تقول I control my code ، فأنت بحاجة إلى تجربة فقدان هذا التحكم مرة واحدة على الأقل.





express