Почему мы можем использовать глобальную переменную в браузере? - PullRequest
0 голосов
/ 19 сентября 2019

Как мы знаем, глобальная переменная window в браузере и global в nodejs.

Я читаю исходный код некоторых пакетов NPM, их использование global подобно global.Set вместо window.Set.Когда я импортирую этот пакет, он хорошо работает в моей базе проекта в браузере.Это смущает меня.

Я думаю, причина в babel.Может быть, использовать global можно написать кроссплатформенный пакет по babel?Но как это работает.

Использование пакета global

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Я не эксперт ни в babel, ни в webpack, это далеко не так, но, глядя на выходной код из webpack, вы можете увидеть, что webpack вводит вариант global в ваш код, если вы его используете, поэтому если мыиметь простой код вроде:

console.log("just a test");

Это то, что заканчивается в нашем исходном коде:

eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] =

Но, если бы мы использовали следующий код:

console.log("just a test", global);

Это наш вывод:

eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] =

Вы можете ясно видеть изменение.

Обнаружено это выпуск , который может оказаться полезным для выяснения этого.

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

Обратите внимание, что у вас нет доступа к globalвариант в консоли.

Примечание global и window - это один и тот же объект, это не копия, поэтому все изменения, сделанные в global, будут выполнены в window

0 голосов
/ 19 сентября 2019

Чтобы всегда использовать ключевое слово global:

if (!(typeof module !== 'undefined' && module.exports)) global = window;

console.log( global.name ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...