node.jsおよびブラウザーのインプレッションJavaScriptモジュールパターン

社会には、公式目的でグローバル変数を使用することに対する偏見がまだあるという印象があります。 この点で、すべての疑念を取り除き、JavaScript開発のモジュール性と柔軟性を必要とするすべての人に役立つ例で、いくつかの明確化を提供したいと思います 。 私は以下のすべてのアイデアのソースを追跡することはできませんが、私はそれらの著者であるふりをするのではなく、創造的な一般化についてのみです。 また、あらゆる場合のモジュールを決定するための1つの普遍的なパターンに対する主張を拒否します。これは決して起こり得ないことを誰もが理解してくれることを願っています。 これはすべて、RequireJS、CommonJS、およびmodule.exportsを介したnode.jsでのモジュールの形成方法とは大きく異なりますが、 狂信や偏見なしにタスクにアプローチする場合、これらのパターンはそれぞれ独自の場所を持っています。

特徴




コード



// File: global.js //     if (typeof(window) != 'undefined') window.global = window; Function.prototype.override = function(fn) { var superFunction = this; return function() { this.inherited = superFunction; return fn.apply(this, arguments); } } 


 // File: moduleName.js //    moduleName (,    ) (function(moduleName) { //     console.log(' moduleName'); moduleName.publicProperty = '  '; var privateProperty = '  '; moduleName.publicMethod = function() { console.log(' publicMethod  moduleName'); }; moduleName.toBeOverridden = function() { console.log('   toBeOverriden   moduleName ( )'); }; var privateMethod = function() { console.log('  privateMethod  moduleName'); }; } (global.moduleName = global.moduleName || {})); 


 // File: moduleName.implementationName.js //    moduleName  ,      (function(moduleName) { //        console.log(' implementationName'); //      //       // moduleName.publicProperty = '  '; //      //        // var privateProperty = '   '; moduleName.publicMethod = function() { //      //       console.log('  '); }; var privateMethod = function() { console.log('   '); }; //    "Function.override" // moduleName.toBeOverridden = moduleName.toBeOverridden.override(function() { console.log(' : moduleName.toBeOverridden'); this.inherited(); //     }); //   ,     //  -         // moduleName.wrapperName = function() { //      console.log('   '); moduleName.publicMethod = moduleName.publicMethod.override(function() { console.log(' : moduleName.publicMethod'); }); }; } (global.moduleName = global.moduleName || {})); 


 // File: test.js require('./global.js'); require('./moduleName.js'); require('./moduleName.implementationName.js'); moduleName.wrapperName(); moduleName.publicMethod(); 


Impressでのこのテンプレートの適用方法



1.杭打ち impress.jsからレンダリングされたimpress.constants.js
2. サブモジュール db.mongodb.jsdb.jsを拡張します
3.すべてのImpressハンドラーは個別のファイルにあるため、ハンドラーにrequireを記述する必要はありません。 ただし、ハンドラー自体は、node.jsの通常のメソッドを使用して定義されます。 module.exportsを介して。
例:
 module.exports = function(req, res, callback) { res.context.data = []; db.impress.sessions.find({}).toArray(function(err, nodes) { res.context.data = nodes; callback(); }); } 


参照資料



Githubのロシア語と英語のコメント付きGlobal.js: github.com/tshemsedinov/global.js
GithubのImpress: https : //github.com/tshemsedinov/impress
npmで印象づける: https : //npmjs.org/package/impress

PS。 私は、プライベートメソッドにエラーを発見したtblasvに深く感謝しています。

Source: https://habr.com/ru/post/J183188/


All Articles