рд╕рдордЭрдирд╛ (рд╕рднреА) "рдореЙрдбреНрдпреВрд▓рд░" рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЙрдкрдХрд░рдг



рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!

рдореИрдВ рдЖрдкрдХреЛ рдбрд┐рдХреНрд╕рди рдХреЗ рд▓реЗрдЦ "рдЕрдВрдбрд░рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ (рд╕рднреА) рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЙрдкрдХрд░рдг" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ ред

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


IIFE рдореЙрдбреНрдпреВрд▓: JS рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ


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

    //   
    let count = 0
    const increase = () => ++count
    const reset = () => {
        count = 0
        console.log(' .')
    }

    //   
    increase()
    reset()

рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдкреНрд░рджреВрд╖рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    (() => {
        let count = 0
        // ...
    })

рд╡реЛрдЗрд▓рд╛, рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

IIFE: рддрддреНрдХрд╛рд▓ рдлрд╝рдВрдХреНрд╢рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐


рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП f, рдЗрд╕реЗ ()рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП f()ред рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (() => {})рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ()ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (() => {})():

    (() => {
        let count = 0
        // ...
    })()

рдЗрд╕реЗ IIFE (рддреБрд░рдВрдд рдлрд╝рдВрдХреНрд╢рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

    //  IIFE 
    const iifeCounterModule = (() => {
        let count = 0
        return {
            increase: () => ++count,
            reset: () => {
                count = 0
                console.log(' .')
            }
        }
    })()

    //  IIFE 
    iifeCounterModule.increase()
    iifeCounterModule.reset()

рд╣рдо IIFE рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдпрд╛рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИ - рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо (рдпрд╛ рдЗрд╕рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди)ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдЗрд╕реЗ (рдирд┐рд░реНрдпрд╛рдд) рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ JS рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдпрд╛рдд рдХреА рдЕрд╢реБрджреНрдзрддрд╛


рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореЙрдбреНрдпреВрд▓рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрднрд░ рдореЙрдбреНрдпреВрд▓ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИред рдЖрд╢реНрд░рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

    //  IIFE   
    const iifeCounterModule = ((dependencyModule1, dependencyModule2) => {
        let count = 0
        return {
            increase: () => ++count,
            reset: () => {
                count = 0
                console.log(' .')
            }
        }
    })(dependencyModule1, dependencyModule2)

JQuery рдЬреИрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдиреЗ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ (jQuery рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг UMD рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

рдУрдкрди рдореЙрдбреНрдпреВрд▓: рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЦреЛрд▓реЗрдВ


рдЦреБрд▓рд╛ рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдИрд╕рд╛рдИ рд╣реЗрдЗрд▓реНрдорди рджреНрд╡рд╛рд░рд╛ рдЧрдврд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ IIFE рднреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

    //   
    const revealingCounterModule = (() => {
        let count = 0
        const increase = () => ++count
        const reset = () => {
            count = 0
            console.log(' .')
        }

        return {
            increase,
            reset
        }
    })()

    //   
    revealingCounterModule.increase()
    revealingCounterModule.reset()

рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреНрдпрд╛ (рдпрд╛ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

CJS рдореЙрдбреНрдпреВрд▓: CommonJS рдореЙрдбреНрдпреВрд▓ рдпрд╛ Node.js рдореЙрдбреНрдпреВрд▓


рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░рдЬреЗрдПрд╕ рдирд╛рдордХ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред рдпрд╣ Node.js. рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ JS рдлрд╝рд╛рдЗрд▓ CJS рд╣реИред рдЪрд░ moduleрднреА exportsрдореЙрдбреНрдпреВрд▓ (рдлрд╝рд╛рдЗрд▓) рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди requireрд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб CommonJS рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

    //  CommonJS : commonJSCounterModule.js
    const dependencyModule1 = require('./dependencyModule1')
    const dependencyModule2 = require('./dependencyModule2')

    let count = 0
    const increase = () => ++count
    const reset = () => {
        count = 0
        console.log(' .')
    }

    exports.increase = increase
    exports.reset = reset
    //  ()
    module.exports = {
        increase,
        reset
    }

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

    //  CommonJS 
    const {
        increase,
        reset
    } = require('./commonJSCounterModule')
    increase()
    reset()
    // 
    const commonJSCounterModule = require('./commonJSCounterModule')
    commonJSCounterModule.increase()
    commonJSCounterModule.reset()

Node.js рд░рдирдЯрд╛рдЗрдо (рдЗрдВрдЬрди) рдореЗрдВ, рдЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЪрд░ exports, moduleрдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ require:

    //  CommonJS 
    (function(exports, require, module, __filename, __dirname) {
        const dependencyModule1 = require('./dependencyModule1')
        const dependencyModule2 = require('./dependencyModule2')

        let count = 0
        const increase = () => ++count
        const reset = () => {
            count = 0
            console.log(' .')
        }

        module.exports = {
            increase,
            reset
        }

        return module.exports
    }).call(thisValue, exports, require, module, filename, dirname)

    //  CommonJS 
    (function(exports, require, module, __filename, __dirname) {
        const commonJSCounterModule = require('./commonJSCounterModule')
        commonJSCounterModule.increase()
        commonJSCounterModule.reset()
    }).call(thisValue, exports, require, module, filename, dirname)

рдПрдПрдордбреА рдореЙрдбреНрдпреВрд▓ рдпрд╛ рд░рд┐рдХреНрдЬреЗрд╕реНрдЯ рдореЙрдбреНрдпреВрд▓


AMD ( рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ ) рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдПрдПрдордбреА рдореЗрдВ рдПрдХ defineрдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо, рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдирд╛рдо рдФрд░ рдлреИрдХреНрдЯреНрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

    //  AMD 
    define('amdCounterModule', ['dependencyModule1', 'dependencyModule2'], (dependencyModule1, dependencyModule2) => {
        let count = 0
        const increase = () => ++count
        const reset = () => {
            count = 0
            console.log(' .')
        }

        return {
            increase,
            reset
        }
    })

рдЗрд╕рдореЗрдВ requireрдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ :

    //  AMD 
    require(['amdCounterModule'], amdCounterModule => {
        amdCounterModule.increase()
        amdCounterModule.reset()
    })


requireAMD requireCommonJS рд╕реЗ рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИред

рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ


рдлрд╝рдВрдХреНрд╢рди defineрдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдп рднреА рд╣реИред рдпрд╣ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ requireрдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдордирдЬрд╕-рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

    //   AMD 
    define(require => {
        const dynamicDependencyModule1 = require('dependencyModule1')
        const dynamicDependencyModule2 = require('dependencyModule2')

        let count = 0
        const increase = () => ++count
        const reset = () => {
            count = 0
            console.log(' .')
        }

        return {
            increase,
            reset
        }
    })

рдХреЙрдорди рдЬреЗрдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдПрдордбреА рдореЙрдбреНрдпреВрд▓


рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди define, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд require, рдЪрд░ exportsрдФрд░ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ moduleред рдЗрд╕рд▓рд┐рдП, defineCommonJS рдХреЗ рдХреЛрдб рдХреЛ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :

    //  AMD   CommonJS 
    define((require, exports, module) => {
        // CommonJS 
        const dependencyModule1 = require('dependencyModule1')
        const dependencyModule2 = require('dependencyModule2')

        let count = 0
        const increase = () => ++count
        const reset = () => {
            count = 0
            console.log(' .')
        }

        exports.increase = increase
        exports.reset = reset
    })

    //  AMD   CommonJS 
    define(require => {
        // CommonJS 
        const counterModule = require('amdCounterModule')
        counterModule.increase()
        counterModule.reset()
    })

UMD рдореЙрдбреНрдпреВрд▓: рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛ UmdJS рдореЙрдбреНрдпреВрд▓


рдпреВрдПрдордбреА ( рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ ) - рд╡рд┐рднрд┐рдиреНрди рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯред

AMD (рдЖрд╡рд╢реНрдпрдХрддрд╛) рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП UMD


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рджреЛрдиреЛрдВ AMD (рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ) рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

    //  UMD   AMD (RequireJS)  
    ((root, factory) => {
        //   define AMD/RequireJS
        if (typeof define === 'function' && define.amd) {
            //  ,      
            define('umdCounterModule', ['dependencyModule1', 'dependencyModule2'], factory)
        } else {
            //  ,    
            //      (  Window)
            //    
            root.umdCounterModule = factory(root.dependencyModule1, root.dependencyModule2)
        }
    })(typeof self !== undefined ? self : this, (dependencyModule1, dependencyModule2) => {
        //  
        let count = 0
        const increase = () => ++count
        const reset = () => {
            count = 0
            console.log(' ')
        }

        return {
            increase,
            reset
        }
    })

рдпрд╣ рдЬрдЯрд┐рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл IIFE рд╣реИред рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ defineрдПрдПрдордбреА / рд░рд┐рдХреНрдЬреЗрдЬреЗрдПрд╕ рд╕реЗ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╣реИред

  • рдпрджрд┐ defineрдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлреИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ defineрдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдлреИрдХреНрдЯреНрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рддрд░реНрдХ rootрдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ (рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдг) рд╕реЗ рдирд┐рд░реНрднрд░ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ factoryрдореЙрдбреНрдпреВрд▓ рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ (рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐) рднреА рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдПрдПрдордбреА рдХреЗ рд▓рд┐рдП рдпреВрдПрдордбреА (рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ) рдФрд░ рдХреЙрдордирдЬрд╕ (рдиреЛрдб.рдЬреЗрдПрд╕)


рдирд┐рдореНрди рдХреЛрдб AMD (рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ) рдФрд░ рдХреЙрдордирдЬ (Node.js) рджреЛрдиреЛрдВ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

    (define => define((require, exports, module) => {
        //  
        const dependencyModule1 = require("dependencyModule1")
        const dependencyModule2 = require("dependencyModule2")

        let count = 0
        const increase = () => ++count
        const reset = () => {
            count = 0
            console.log("Count is reset.")
        }

        module.export = {
            increase,
            reset
        }
    }))( //   module  exports  CommonJS/Node.js
        //    define  AMD/RequireJS
        typeof module === 'object' && module.exports && typeof define !== 'function'
            ? // CommonJS/Node.js.    define
                factory => module.exports = factory(require, exports, module)
            : // AMD/RequireJS.   define
                define)

рдбрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╕рд┐рд░реНрдл IIFE рд╣реИред рдЬрдм рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рддрд░реНрдХ "рдореВрд▓реНрдпрд╛рдВрдХрди" рд╣реИред рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдорд╛рд╣реМрд▓ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдирд╛ (рд╡реИрд░рд┐рдПрдмрд▓ moduleрдФрд░ рдХреЙрдордирдЬреЗрд╕ / рдиреЛрдбреНрд╕.рдЬреЗрдПрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ exports, рдФрд░ defineрдПрдПрдордбреА / рд░рд┐рдХреНрдЬреЗрдЬреЗрдПрд╕ рдХреЗ рдХрд╛рд░реНрдп)ред

  • рдпрджрд┐ рд░рдирдЯрд╛рдЗрдо CommonJS / Node.js рд╣реИ, рддреЛ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ defineред
  • рдпрджрд┐ рд░рдирдЯрд╛рдЗрдо AMD / рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрд░реНрдХ defineрдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ defineред рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ defineред

ES рдореЙрдбреНрдпреВрд▓: ECMAScript2015 рдпрд╛ ES6 рдореЙрдбреНрдпреВрд▓


2015 рдореЗрдВ, рдЬреЗрдПрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 6 рдиреЗ рдПрдХ рдирдпрд╛ рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдЗрд╕реЗ ECMAScript 2015 (ES2015) рдпрд╛ ECMAScript 6 (ES6) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЖрдзрд╛рд░ рдХреАрд╡рд░реНрдб importрдФрд░ рд╣реИ exportред рдирд┐рдореНрди рдХреЛрдб рдирд╛рдо рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдЖрдпрд╛рдд / рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП ES рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

    //  ES : esCounterModule.js  esCounterModule.mjs
    import dependencyModule1 from './dependencyModule1.mjs'
    import dependencyModule2 from './dependencyModule2.mjs'

    let count = 0
    //  
    export const increase = () => ++count
    export const reset = () => {
        count = 0
        console.log(' .')
    }
    //    
    export default {
        increase,
        reset
    }

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреИрдЧ рдЬреЛрдбрд╝реЗрдВ <script>рдФрд░ рдЗрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдиреЗрдВ <script type="module" src="esCounterModule.js"></script>:ред Node.js рдореЗрдВ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ .mjs:

    //  ES 
    //    
    import {
        increase,
        reset
    } from './esCounterModule.mjs'
    increase()
    reset()
    //      
    import esCounterModule from './esCounterModule.mjs'
    esCounterModule.increase()
    esCounterModule.reset()


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк <script>рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреИрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ nomodule:

    <рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдорд╛рдВрдХрд┐рдд>
        рдЪреЗрддрд╛рд╡рдиреА ('рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ')
    </ Script>

ES рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЙрдбреНрдпреВрд▓: ECMAScript2020 рдпрд╛ ES11 рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЙрдбреНрдпреВрд▓


рдЬреЗрдПрд╕ 2020 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдирд╡реАрдирддрдо 11 рд╕рдВрд╕реНрдХрд░рдг importрдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ then:

    //   ES    ,    
    import('./esCounterModule.js').then(({
        increase,
        reset
    }) => {
        increase()
        reset()
    })
    //      
    import('./esCounterModule.js').then(dynamicESCounterModule => {
        dynamicESCounterModule.increase()
        dynamicESCounterModule.reset()
    })

рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдлрд╝рдВрдХреНрд╢рди importрдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ await:

    //   ES   async/await
    (async () => {
        //    
        const {
            increase,
            reset
        } = await import('./esCounterModule.js')
        increase()
        reset()

        //      
        const dynamicESCounterModule = await import('./esCounterModule.js')
        dynamicESCounterModule.increase()
        dynamicESCounterModule.reset()
    })

рд╕рд┐рд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓: SystemJS рдореЙрдбреНрдпреВрд▓


SystemJS рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ ES рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:

    //  ES 
    import dependencyModule1 from "./dependencyModule1.js"
    import dependencyModule2 from "./dependencyModule2.js"
    dependencyModule1.api1()
    dependencyModule2.api2()

    let count = 0
    //  
    export const increase = function() {
        return ++count
    }
    export const reset = function() {
        count = 0
        console.log("Count is reset.")
    }
    //    
    export default {
        increase,
        reset
    }

рдпрд╣ рдХреЛрдб рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди System.registerSystemJS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИ:

    //  SystemJS 
    System.register(['./dependencyModule1', './dependencyModule2'], function(exports_1, context_1) {
        'use strict'
        var dependencyModule1_js_1, dependencyModule2_js_1, count, increase, reset
        var __moduleName = context_1 && context_1.id
        return {
            setters: [
                function(dependencyModule1_js_1_1) {
                    dependencyModule1_js_1 = dependencyModule1_js_1_1
                },
                function(dependencyModule2_js_1_1) {
                    dependencyModule2_js_1 = dependencyModule2_js_1_1
                }
            ],
            execute: function() {
                dependencyModule1_js_1.default.api1()
                dependencyModule2_js_1.default.api2()
                count = 0
                //  
                exports_1('increase', increase = function() {
                    return ++count
                })
                exports_1('reset', reset = function() {
                    count = 0
                    console.log(' .')
                })
                //    
                exports_1('default', {
                    increase,
                    reset
                })
            }
        }
    })

рдирдпрд╛ рдореЙрдбреНрдпреВрд▓рд░ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХреЛрдб рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓реАрдХреЗрд╢рди рд╡реЗрдмрдкреИрдХ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЧрддрд┐рд╢реАрд▓ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ


SystemJS рдореЗрдВ importрдбрд╛рдпрдиреЗрдорд┐рдХ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ :

    //  SystemJS   
    System.import('./esCounterModule.js').then(dynamicESCounterModule => {
        dynamicESCounterModule.increase()
        dynamicESCounterModule.reset()
    })

рд╡реЗрдмрдкреИрдХ рдореЙрдбреНрдпреВрд▓: рд╕реАрдЬреЗрдПрд╕, рдПрдПрдордбреА рдФрд░ рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрдХрд▓рди рдФрд░ рд╕рдВрдпреЛрдЬрди


рд╡реЗрдмрдкреИрдХ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрд┐рд▓реНрдбрд░ рд╣реИред рдЗрд╕рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкреЙрдЗрд▓рд░ CommonJS, AMD рдФрд░ ES рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рд╣реА рд╕рдВрддреБрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдлрд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 3 рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, 3 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

    //  AMD : amdDependencyModule1.js
    define('amdDependencyModule1', () => {
        const api1 = () => {}
        return {
            api1
        }
    })

    //  CommonJS : commonJSDependencyModule2.js
    const dependencyModule2 = require('./commonJSDependencyModule2')
    const api2 = () => dependencyModule1.api1()
    exports.api2 = api2

    //  ES : esCounterModule.js
    import dependencyModule1 from './amdDependencyModule1'
    import dependencyModule2 from './commonJSDependencyModule2'

    let count = 0
    const increase = () => ++count
    const reset = () => {
        count = 0
        console.log(' .')
    }

    export default {
        increase,
        reset
    }

рдирд┐рдореНрди рдХреЛрдб рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

    //  ES : index.js
    import counterModule from './esCounterModule'
    counterModule.increase()
    counterModule.reset()

рд╡реЗрдмрдкреИрдХ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рд╕реНрдЯрдо рд╣реИрдВ, рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ main.js:

    рдЬрдбрд╝
        рдЬрд┐рд▓реЗ
            main.js (src рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЕрд╕реЗрдВрдмрд▓реА)
        src
            amdDependencyModule1.js
            commonJSDependencyModule2.js
            esCounterModule.js
            index.js
        webpack.config.js

рдЪреВрдВрдХрд┐ Webpack Node.js рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ CommonJS рдХреЗ рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрди webpack.config.js:

    const path = require('path')

    module.exports = {
        entry: './src/index.js',
        mode: 'none', //          
        output: {
            filename: 'main.js',
            path: path.resolve(__dirname, 'dist'),
        },
    }

рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рд╣реЛрдВрдЧреЗ:

    npm рд╡реЗрдмрдкреИрдХ webpack-cli -save-dev рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
    npx рд╡реЗрдмрдкреИрдХ --config webpack.config.js

рдирддреАрдЬрддрди, рд╡реЗрдмрдкреИрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛ main.jsред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб main.jsрдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

    (function(modules) { //  Webpack
        //    
        var installedModules = {}
        //  require
        function require(moduleId) {
            // ,     
            if (installedModules[moduleId]) {
                return installedModules[moduleId].exports
            }
            //        
            var module = installedModules[moduleId] = {
                i: moduleId,
                l: false,
                exports: {}
            }
            //   module
            modules[moduleId].call(module.exports, module, module.exports, require)
            //    
            module.l = true
            //   exports 
            return module.exports
        }

        //   modules (__webpack_modules__)
        require.m = modules
        //    
        require.c = installedModules
        //     
        require.d = function(exports, name, getter) {
            if (!require.o(exports, name)) {
                Object.defineProperty(exports, name, {
                    enumerable: true,
                    get: getter
                })
            }
        }
        //  __esModule  exports
        require.r = function(exports) {
            if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
                Object.defineProperty(exports, Symbol.toStringTag, {
                    value: 'Module'
                })
            }
            Object.defineProperty(exports, '__esModule', {
                value: true
            })
        }
        //       
        // mode & 1:  -  ,  
        // mode & 2:       ns (namespace)
        // mode & 4:  ,   ns  
        // mode & 8|1:   require
        require.t = function(value, mode) {
            if (mode & 1) value = require(value)
            if (mode & 8) return value
            if ((mode & 4) && typeof value === 'object' && value && value.__esModule) return value
            var ns = Object.create(null)
            require.r(ns)
            Object.defineProperty(ns, 'default', {
                enumerable: true,
                value: value
            })
            if (mode & 2 && typeof value !== 'string')
                for (var key in value) require.d(ns, key, function(key) {
                    return value[key]
                }.bind(null, key))
            return ns
        }
        //  getDefaultExport      
        require.n = function(module) {
            var getter = module && module.__esModule ?
                function getDefault() {
                    return module['default']
                } :
                function getModuleExports() {
                    return module
                }
            require.d(getter, 'a', getter)
            return getter
        }
        // Object.prototype.hasOwnProperty.call
        require.o = function(object, property) {
            return Object.prototype.hasOwnProperty.call(object, property)
        }
        // __webpack_public_path__
        require.p = ''
        //      exports
        return require(require.s = 0)
    })([
        function(module, exports, require) {
            'use strict'
            require.r(exports)
            //  ES : index.js
            var esCounterModule = require(1)
            esCounterModule['default'].increase()
            esCounterModule['default'].reset()
        },
        function(module, exports, require) {
            'use strict'
            require.r(exports)
            //  ES : esCounterModule.js
            var amdDependencyModule1 = require.n(require(2))
            var commonJSDependencyModule2 = require.n(require(3))
            amdDependencyModule1.a.api1()
            commonJSDependencyModule2.a.api2()

            let count = 0
            const increase = () => ++count
            const reset = () => {
                count = 0
                console.log(' .')
            }

            exports['default'] = {
                increase,
                reset
            }
        },
        function(module, exports, require) {
            var result!(result = (() => {
                    //  AMD : amdDependencyModule1.js
                    const api1 = () => {}
                    return {
                        api1
                    }
                }).call(exports, require, exports, module),
                result !== undefined && (module.exports = result))
        },
        function(module, exports, require) {
            //  CommonJS : commonJSDependencyModule2.js
            const dependencyModule1 = require(2)
            const api2 = () => dependencyModule1.api1()
            exports.api2 = api2
        }
    ])

рдФрд░ рдлрд┐рд░, рдпрд╣ рд╕рд┐рд░реНрдл IIFE рд╣реИред 4 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдХреЛрдб рдХреЛ 4 рдлрд╝рдВрдХреНрд╢рди рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рд░рдгреА рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХреА рдЬрд╛рддреА рд╣реИред

рдмреИрдмрд▓ рдореЙрдбреНрдпреВрд▓: ES рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓реАрдХреЗрд╢рди


рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ ES6 + рдХреЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдмреЗрд▓ рдПрдХ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯрд░ рд╣реИред рдЙрдкрд░реЛрдХреНрдд ES6 + рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдмрд╛рдмреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

    // Babel
    Object.defineProperty(exports, '__esModule', {
        value: true
    })
    exports['default'] = void 0

    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            'default': obj
        }
    }

    //  ES : esCounterModule.js
    var dependencyModule1 = _interopRequireDefault(require('./amdDependencyModule1'))
    var dependencyModule2 = _interopRequireDefault(require('./commonJSDependencyModule2'))
    dependencyModule1['default'].api1()
    dependencyModule2['default'].api2()

    var count = 0
    var increase = function() {
        return ++count
    }
    var reset = function() {
        count = 0
        console.log(' .')
    }

    exports['default'] = {
        increase: increase,
        reset: reset
    }

рдФрд░ рдпрд╣рд╛рдБ index.jsрдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИ :

    // Babel
    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            'default': obj
        }
    }

    //  ES : index.js
    var esCounterModule = _interopRequireDefault(require('./esCounterModule.js'))
    esCounterModule['default'].increase()
    esCounterModule['default'].reset()

рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдмреИрдмреЗрд▓ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

рдмреИрдмреЗрд▓ рдФрд░ рд╕рд┐рд╕реНрдЯрдордЬреЗрдПрд╕


SystemJS рдХреЛ рдмреИрдмрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

    npm install --save-dev @ babel / plugin-transform-рдореЙрдбреНрдпреВрд▓-systemjs


рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП babel.config.json:

    {
        'рдкреНрд▓рдЧрдЗрдиреНрд╕': ['@ babel / рдкреНрд▓рдЧрдЗрди-рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо-рдореЙрдбреНрдпреВрд▓реНрд╕-рд╕рд┐рд╕реНрдЯрдордЬ'],
        'рдкреНрд░реАрд╕реЗрдЯ': [
            [
            '@ babel / env',
                {
                    'рд▓рдХреНрд╖реНрдп': {
                        'рдЕрд░реНрдерд╛рдд': '11'
                    }
                }
            ]
        ]
    }

рдЕрдм Babel SystemJS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ CommonJS / Node.js, AMD / рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдФрд░ ES рдореЙрдбреНрдпреВрд▓

    npx рдмреЗрдмрд▓ src --out-dir lib

рдкрд░рд┐рдгрд╛рдо:

    рдЬрдбрд╝
        lib
            amdD dependencyModule1.js (SystemJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкреЗрдб)
            commonJSD dependencyModule2.js (SystemJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рдб)
            esCounterModule.js (SystemJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдб)
            index.js (SystemJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рдб)
        src
            amdDependencyModule1.js
            commonJSDependencyModule2.js
            esCounterModule.js
            index.js
        babel.config.json

AMD, CommonJS рдФрд░ ES рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреВрд░реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ SystemJS рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

    //  AMD/RequireJS   SystemJS : lib/amdDependencyModule1.js
    System.register([], function(_export, _context) {
        'use strict'
        return {
            setters: [],
            execute: function() {
                //  AMD : src/amdDependencyModule1.js
                define('amdDependencyModule1', () => {
                    const api1 = () => {}

                    return {
                        api1
                    }
                })
            }
        }
    })

    //  CommonJS/Node.js   SystemJS : lib/commonJSDependencyModule2.js.
    System.register([], function(_export, _context) {
        'use strict'
        var dependencyModule1, api2
        return {
            setters: [],
            execute: function() {
                //  CommonJS : src/commonJSDependencyModule2.js
                dependencyModule1 = require('./amdDependencyModule1')

                api2 = () => dependencyModule1.api1()

                exports.api2 = api2
            }
        }
    })

    //  ES   SystemJS 
    System.register(['./amdDependencyModule1', './commonJSDependencyModule2'], function(_export, _context) {
        var dependencyModule1, dependencyModule2, count, increase, reset
        return {
            setters: [function(_amdDependencyModule) {
                dependencyModule1 = _amdDependencyModule.default
            }, function(_commonJSDependencyModule) {
                dependencyModule2 = _commonJSDependencyModule.default
            }],
            execute: function() {
                //  ES : src/esCounterModule.js
                dependencyModule1.api1()
                dependencyModule1.api2()
                count = 0

                increase = () => ++count

                reset = () => {
                    count = 0
                    console.log(' .')
                }

                _export('default', {
                    increase,
                    reset
                })
            }
        }
    })

    //  ES   SystemJS : lib/index.js
    System.register(['./esCounterModule'], function(_export, _context) {
        var esCounterModule
        return {
            setters: [function(_esCounterModule) {
                esCounterModule = _esCounterModule.default
            }],
            execute: function() {
                //  ES : src/index.js
                esCounterModule.increase()
                esCounterModule.reset()
            }
        }
    })

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓: CJS, AMD, ES рдФрд░ SystemJS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓реАрдХреЗрд╢рди


рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдИрдПрд╕ 6 рд╕рд╣рд┐рдд рдЬреЗрдПрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рднреА рд╕реНрд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрдЯреЗрд╢рди рдХреЗ рджреМрд░рд╛рди, ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рджреВрд╕рд░реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдЬреЗрд▓реЗрд╢рди рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ CommonJS / Node.js, AMD / NeedJS, UMD / UmdJS рдпрд╛ SystemJS рд╢рд╛рдорд┐рд▓ рд╣реИрдВ tsconfig.json:

    {
        'рд╕рдВрдХрд▓рдХ': {
            'рдореЙрдбреНрдпреВрд▓': 'ES2020' // рдХреЛрдИ рдирд╣реАрдВ, рдХреЙрдордирдЬрд╕, рдПрдПрдордбреА, рд╕рд┐рд╕реНрдЯрдо,
            UMD, ES6, ES2015, ESNext
        }
    }

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

    // TypeScript  ES 
    //  compilerOptions: { module: 'ES6' }.    
    import dependencyModule from './dependencyModule'
    dependencyModule.api()
    let count = 0
    export const increase = function() {
        return ++count
    }

    //  compilerOptions: { module: 'CommonJS' }.   CommonJS/Node.js 
    var __importDefault = (this && this.__importDefault) || function(mod) {
        return (mod && mod.__esModule) ? mod : {
            'default': mod
        }
    }
    exports.__esModule = true

    var dependencyModule_1 = __importDefault(require('./dependencyModule'))
    dependencyModule_1['default'].api()
    var count = 0
    exports.increase = function() {
        return ++count
    }

    //  compilerOptions: { module: 'AMD' }.   AMD/RequireJS 
    var __importDefault = (this && this.__importDefault) || function(mod) {
        return (mod && mod.__esModule) ? mod : {
            'default': mod
        }
    }
    define(['require', 'exports', './dependencyModule'], function(require, exports, dependencyModule_1) {
        'use strict'
        exports.__esModule = true

        dependencyModule_1 = __importDefault(dependencyModule_1)
        dependencyModule_1['default'].api()
        var count = 0
        exports.increase = function() {
            return ++count
        }
    })

    //  compilerOptions: { module: 'UMD' }.   UMD/UmdJS 
    var __importDefault = (this & this.__importDefault) || function(mod) {
            return (mod && mod.__esModule) ? mod : {
                'default': mod
            }
        }
        (function(factory) {
            if (typeof module === 'object' && typeof module.exports === 'object') {
                var v = factory(require, exports)
                if (v !== undefined) module.exports = v
            } else if (typeof define === 'function' && define.amd) {
                define(['require', 'exports', './dependencyModule'], factory)
            }
        })(function(require, exports) {
            'use strict'
            exports.__esModule = true

            var dependencyModule_1 = __importDefault(require('./dependencyModule'))
            dependencyModule_1['default'].api()
            var count = 0
            exports.increase = function() {
                return ++count
            }
        })

    //  compilerOptions: { module: 'System' }.   System/SystemJS 
    System.register(['./dependencyModule'], function(exports_1, context_1) {
        'use strict'
        var dependencyModule_1, count, increase
        car __moduleName = context_1 && context_1.id
        return {
            setters: [
                function(dependencyModule_1_1) {
                    dependencyModule_1 = dependencyModule_1_1
                }
            ],
            execute: function() {
                dependencyModule_1['default'].api()
                count = 0
                exports_1('increase', increase = function() {
                    return ++count
                })
            }
        }
    })

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдореЙрдбреНрдпреВрд▓рд░ ES рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди


рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреАрд╡рд░реНрдб moduleрдФрд░ рднреА рд╣реЛрддреЗ рд╣реИрдВ namespaceред рдЙрдиреНрд╣реЗрдВ рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

    module Counter {
        let count = 0
        export const increase = () => ++count
        export const reset = () => {
            count = 0
            console.log(' .')
        }
    }

    namespace Counter {
        let count = 0
        export const increase = () => ++count
        export const reset = () => {
            count = 0
            console.log(' .')
        }
    }

рджреЛрдиреЛрдВ рдХреЛ рдЬреЗрдПрд╕ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

    var Counter;
    (function(Counter) {
        var count = 0
        Counter.increase = function() {
            return ++count
        }
        Counter.reset = function() => {
            count = 0
            console.log(' .')
        }
    })(Counter || (Counter = {}))

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рдХрдИ рд╕реНрддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ .:

    module Counter.Sub {
        let count = 0
        export const increase = () => ++count
    }

    namespace Counter.Sub {
        let count = 0
        export const increase = () => ++count
    }

рдЙрдк рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрдк рдирд╛рдо рд╕реНрдерд╛рди рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдП рдЧрдП рд╣реИрдВ:

    var Counter;
    (function(Counter) {
        var Sub;
        (function(Sub) {
            var count = 0
            Sub.increase = function() {
                return ++count
            }
        })(Sub = Counter.Sub || (Counter.Sub = {}))
    })(Counter || (Counter = {}))

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ export:

    module Counter {
        let count = 0
        export module Sub {
            export const increase = () => ++count
        }
    }

    module Counter {
        let count = 0
        export namespace Sub {
            export const increase = () => ++count
        }
    }

рдЙрдкрд░реНрдпреБрдХреНрдд рдХреЛрдб рдЙрдк рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрдк рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рднреА рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ:

    var Counter;
    (function(Counter) {
        var count = 0
        var Sub;
        (function(Sub) {
            Sub.increase = function() {
                return ++count
            }
        })(Sub = Counter.Sub || (Counter.Sub = {}))
    })(Counter || (Counter = {}))

рдирд┐рд╖реНрдХрд░реНрд╖


JS рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 10+ рд╕рд┐рд╕реНрдЯрдо / рдореЙрдбреБрд▓рди рдкреНрд░рд╛рд░реВрдк / рдирд╛рдорд╕реНрдерд╛рди рд╣реИрдВ:

  • IIFE рдореЙрдбреНрдпреВрд▓: JS рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ
  • рдУрдкрди рдореЙрдбреНрдпреВрд▓: рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЦреЛрд▓реЗрдВ
  • CJS рдореЙрдбреНрдпреВрд▓: CommonJS рдореЙрдбреНрдпреВрд▓ рдпрд╛ Node.js рдореЙрдбреНрдпреВрд▓
  • рдПрдПрдордбреА рдореЙрдбреНрдпреВрд▓: рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЙрдбреНрдпреВрд▓
  • UMD рдореЙрдбреНрдпреВрд▓: рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛ UmdJS рдореЙрдбреНрдпреВрд▓
  • ES рдореЙрдбреНрдпреВрд▓: ECMAScript2015 рдпрд╛ ES6 рдореЙрдбреНрдпреВрд▓
  • ES рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЙрдбреНрдпреВрд▓: ECMAScript2020 рдпрд╛ ES11 рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЙрдбреНрдпреВрд▓
  • рд╕рд┐рд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓: SystemJS рдореЙрдбреНрдпреВрд▓
  • рд╡реЗрдмрдкреИрдХ рдореЙрдбреНрдпреВрд▓: рд╕реАрдЬреЗрдПрд╕, рдПрдПрдордбреА рдФрд░ рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрдХрд▓рди рдФрд░ рд╕рдВрдпреЛрдЬрди
  • рдмреИрдмрд▓ рдореЙрдбреНрдпреВрд▓: ES рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓реАрдХреЗрд╢рди
  • рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЬреЗрдПрд╕ рдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Node.js рдФрд░ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдирд┐рд░реНрдорд┐рдд рдЙрдкрдХрд░рдг рд╣реИрдВред рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирдП рдореЙрдбреНрдпреВрд▓рд░ ES рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ Webpack / Babel / SystemJS / TypeScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

All Articles