Definer.js - рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рд╕реНрдЯрдо

рдЬрдмрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЗрди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ - рдирд┐рд╢реНрдЪрд┐рдд ред

рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд░рдгрд╛рд▓реА рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрд░реЛрдд рдХреЛрдб рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдкрд╕ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдЖрддреНрдо-рдирд┐рд╣рд┐рдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдареЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред

рд╡рд┐рдЪрд╛рд░ рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓ рд╕реЗ рдЬрдЯрд┐рд▓ рддрдХ рдХреИрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рддрд╣рддред



рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХрд╛ рд╕рд╛рд░ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рд▓реЗ рд▓реЛ, index.html :
 <html> <head> <meta charset="utf-8"/> <title> -</title> <script src="jquery.js"></script> <script src="https://rawgithub.com/tenorok/definer/master/definer.js"></script> <script src="modules/cart.js"></script> <script src="modules/list.js"></script> </head> <body> <ul class="list"> <li class="item"> <span class="name"></span>, <span class="price">250</span> </li> <li class="item"> <span class="name"></span>, <span class="price">100</span> </li> <li class="item"> <span class="name"></span>, <span class="price">300</span> </li> </ul> </body> </html> 


рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдбреЛрдо рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

Cart рдореЙрдбреНрдпреВрд▓ рдЬреЛ рд╕рд╛рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдЯреЛрдХрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд▓ рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
 definer('Cart', function() { function Cart() { this.list = []; } Cart.prototype = { add: function(target) { var item = $(target); this.list.push({ name: item.find('.name').text(), price: +item.find('.price').text() }); }, sum: function() { return this.list.reduce(function(sum, item) { return sum + item.price; }, 0); } }; return Cart; }); 


Cart рдирд┐рд░реНрднрд░ list рдореЙрдбреНрдпреВрд▓ рдЬреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдЖрдЧрдВрддреБрдХ рдмрд╛рддрдЪреАрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
 definer('list', function(Cart) { var iCart = new Cart(); $(function() { $('.item').on('click', function(e) { iCart.add(e.currentTarget); console.log(iCart.sum()); }); }); }); 


рдкрд░рд┐рдгрд╛рдо рдПрдХ рдРрд╕рд╛ рдкреГрд╖реНрда рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдХреБрд▓ рдореВрд▓реНрдп рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдордиреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИ рдЬрд┐рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ jQuery рд╣реИред

modules/clean.js рдореМрдЬреВрджрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рдордиреЗ modules/clean.js :
 definer.clean('$'); 


рдЕрдм $ рдЪрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ рд╣реИ:
 console.log($); // undefined 


рдореЙрдбреНрдпреВрд▓ рдореЗрдВ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ:
 definer('Cart', function($) { ... }); definer('list', function($, Cart) { ... }); 


рд╕рднрд╛


рдЕрдм рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЖрдк рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореЙрдбреНрдпреВрд▓ рдмрд┐рд▓реНрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 npm install definer 


рд╣рдо modules рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рднреА modules рдХреЛ index.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ:
 ./node_modules/.bin/definer -d modules/ index.js 


рдЕрдм index.html рдореЗрдВ рдХреЗрд╡рд▓ jQuery рдФрд░ рдЕрд╕рдореНрдмрджреНрдз рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
 <script src="jquery.js"></script> <script src="index.js"></script> 


рдЧреНрд░рдиреНрдЯ-рдбрд┐рдлрд░реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБ


рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреНрд░рдиреНрдЯ рдкреНрд▓рдЧрдЗрди рд╣реИ ред рдЖрдк рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд░рд╛рдиреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреБрджрд╛рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 npm install grunt grunt-cli grunt-contrib-watch grunt-definer 


Gruntfile.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 module.exports = function(grunt) { grunt.initConfig({ watch: { scripts: { files: ['modules/*.js'], tasks: ['definer:all'] }, }, definer: { all: { target: 'index.js', directory: 'modules/' } } }); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-definer'); }; 


рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рд╢реБрд░реВ рдХрд░реЗрдВ:
 ./node_modules/.bin/grunt watch 


рдЕрдм рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреГрддреАрдп-рдкрдХреНрд╖ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдБ


рдЕрдм рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдкреЗрдЬ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИрдВ - jQuery рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ред рдЖрдк рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ jQuery рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреГрд╖реНрда рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЧреНрд░рдиреНрдЯ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП clean рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ:
 definer: { all: { target: 'index.js', directory: 'modules/', clean: { $: 'jquery.js' } } } 


рдЕрдм index.html рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╕реЗрдВрдмрд▓ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
 <script src="index.js"></script> 


JSDoc


рдПрдХрддреНрд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде JSDoc рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рдиреНрдЯ рд▓рдХреНрд╖реНрдп рдореЗрдВ jsdoc рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ:
 jsdoc: { "file": "    -", "copyright": "2014 Artem Kurbatov, tenorok.ru", "license": "MIT license", "version": "package.json", "date": true } 


JSON рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рдЙрд╕реА рдирд╛рдо рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ package.json рдлрд╝рд╛рдЗрд▓ рдбрд╛рд▓реЗрдВ:
 { "version": "0.1.0" } 


рдирд┐рдореНрди JSDoc рдЗрдХрдЯреНрдареЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ:
 /*! * @file     - * @copyright 2014 Artem Kurbatov, tenorok.ru * @license MIT license * @version 0.1.0 * @date 17 February 2014 */ 


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░



рдбрд┐рдлрд╛рдЗрдирд░ рдорджрдж рдХрд░рддрд╛ рд╣реИ:


рдЧрд┐рдердм рдкрд░ рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдЧреНрд░рдВрдЯ-рдирд┐рд╢реНрдЪрд┐рдд рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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


All Articles