2016-03-19 2 views
2

Я импортирую Angular 1.4 в моем модуле точки входа Webpack в качестве модуля CommonJS (то есть с var angular = require("angular");), но каким-то образом он становится доступным в глобальном пространстве имен браузера (т. Е. Как window.angular).Угловой присваивает себя `window.angular` глобально, когда загружается как модуль CommonJS?

В исходном коде угловыми 1.4 я нашел следующие строки:

(function(window, document, undefined) {'use strict'; 

... 

var 
    msie,    // holds major version number for IE, or NaN if UA is not IE. 
    jqLite,   // delay binding since jQuery could be loaded after us. 
    jQuery,   // delay binding 
    slice    = [].slice, 
    splice   = [].splice, 
    push    = [].push, 
    toString   = Object.prototype.toString, 
    getPrototypeOf = Object.getPrototypeOf, 
    ngMinErr   = minErr('ng'), 

    /** @name angular */ 
    angular   = window.angular || (window.angular = {}), 
    angularModule, 
    uid    = 0; 

Таким образом, я могу получить это право, что на require, эту линию:

angular   = window.angular || (window.angular = {}) 

проверки, если глобальная угловой объект доступен, а если нет, создает его. Итак, угловое молчание вводит побочный эффект?

ответ

2

Угловая связь сильно привязана к глобальным переменным, а также множество других устаревших библиотек, которые в какой-то момент не имели возможности стать полноразмерными модулями CJS/UMD (и Angular still isn't, начиная с версии 1 .5.2).

var 
... 
angular   = window.angular || (window.angular = {}) 

равно

if (!window.angular) 
    window.angular = {}; 

var 
... 
angular   = window.angular; 

Бывший несколько байт меньше и пару Dans дилетантский.

Смежные вопросы