Regenerator runtime что это

Обновлено: 07.07.2024

Здравствуйте! В своем решении я использую цикл for..of и на него ругается Линтер (пришлось отключить правило вот такой строкой /* eslint no-restricted-syntax: ["off", "ForOfStatement"] */, как в предыдущих заданиях этого курса).

При этом в тексте урока, в примерах кода, тоже используется for..of, но не в решении учителя. Можете объяснить, в чем подвох на самом деле — почему нельзя использовать for..of?

Текст ошибки: 6:3 error iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations no-restricted-syntax

Владимир Коченов,

Стандарт призывает к использованию чистых функций вместо циклов, чтобы минимизировать побочные эффекты. Упражнения, действительно, сделаны по-разному. Для себя решила, что это неплохо — стимулирует самой покопаться в стандарте. Здесь делаю через forEach.

Отличие с forEach я вроде понял. Осталось понять, чем for. of хуже for и forEach в этом случае. Последних двух линтер пропускает. Как по мне, суть у них, у всех одна.

Владимир Коченов, приветствую!

По этому поводу постоянно ведутся споры, но есть стандарты кодирования и желательно их придерживаться. Хочу отметить, что в большинстве случаев использовать цикл for of вам и не прийдётся, так как javascript предоставляет широкий набор методов, например, функции высшего порядка, которые проходятся в дальнейших курсах. Эти методы имеют ряд преимуществ перед циклами. Но в целях обучения, понимания массивов, и как с ними обращаться очень хорошо подходят циклы, в том числе и цикл for of. Цикл for будет уместен в других ситуациях, например, когда нужно выполнить какой-то код 5 раз. И для выполнения данной задачи цикл for отлично подойдет. А цикл for of, как правило, заменяют на метод forEach.

Станислав Дзисяк, в доке прочитал: "The for each. in statement is deprecated as the part of ECMA-357 (E4X) standard. E4X support has been removed. Consider using for. of instead.".

Дмитрий Герасимов, приветствую!

Обратите внимание, что речь шла о методе forEach. Посмотрите подробнее по этой ссылке в документации.

За время моей работы с вебпаком у меня накопилась пара интересных советов, которые помогут вам приготовить отлично оптимизированное приложение. Приступим!

Кот-фронтендер смотрит на webpack и говорит

1. Используйте fast-async вместо regenerator-runtime

Обычно, разработчики используют @babel/preset-env, чтобы преобразовывать весь современный синтаксис в ES5.

С этим пресетом пайплайн преобразований асинхронных функций выглядит так:
Исходная асинхронная функция -> Генератор -> Функция, использующая regenerator-runtime

1. Исходная асинхронная функция


3. Функция, использующая regenerator-runtime

С fast-async пайплайн упрощается до:
Исходная асинхронная функция -> Функция, использующая промисы

1. Исходная асинхронная функция


2. Функция, использующая промисы

Благодаря этому, теперь у нас нет regenerator-runtime на клиенте и лишних оберток от трансформаций.

Чтобы подвести fast-async в свой проект, надо:

1. Установить его


2. Обновить конфиг бабеля


У меня эта оптимизация уменьшила размер js файлов на 3.2%. Мелочь, а приятно :)

2. Используйте loose трансформации

Без специальной настройки @babel/preset-env пытается сгенерировать как можно более близкий к спецификации код.

Но, скорее всего, ваш код не настолько плох и не использует все возможные крайние случаи ES6+ спецификации. Тогда весь лишний оверхед можно убрать, включив loose трансформации для preset-env:


Пример того, как это работает, можно найти тут.

В моем проекте это уменьшило размер бандла на 3.8%.

3. Настройте минификацию js и css руками

Дефолтные настройки для минификаторов содержат только те трансформации, которые не смогут ничего сломать у программиста. Но мы ведь любим доставлять себе проблемы?
Попробуйте почитать настройки минификатора js и своего минификатора css (я использую cssnano).

Изучив доки, я сделал такой конфиг:


В результате размер js файлов уменьшился на 1.5%, а css — на 2%.

Может, у вас получится лучше?

UPD 11.01.2019: UglifyJsPlugin устарел, webpack сейчас использует TerserWebpackPlugin. Используйте его.

4. Используйте null-loader для удаления ненужных зависимостей

У разработчиков gsap получилась отличная библиотека для создания анимаций. Но из-за того, что она берет свое начало еще из 2008 года, в ней остались некоторые особенности.

А именно вот эта. Благодаря ней TweenMax тянет за собой 5 плагинов и easePack, которые юзать совершенно необязательно.

У себя я заметил три лишних плагина и выпилил их с помощью null-loader:


И 106 кб превращаются в 86. Та-да!

Null-loader еще можно использовать для удаления ненужных полифиллов, которые авторы библиотек заботливо нам подложили.

Я пытаюсь использовать async, жду с нуля на Babel 6, но я получаю регенератор. Время не определено.

Используя его обычно без async / await работает просто отлично. Есть идеи, что я делаю не так?

babel-polyfill требуется. Вы также должны установить его, чтобы заставить работать async / await.

.js с async / await (пример кода)

В файле запуска

Если вы используете веб-пакет , вам нужно указать его в качестве первого значения вашего массива entry в файле конфигурации веб-пакета (обычно webpack.config.js ), как указано в комментарии @Cemen:

Если вы хотите запустить тесты с babel, используйте:

Выводите ссылки на помощники и встроенные функции, автоматически заполняя ваш код, не загрязняя глобальные переменные. Что это на самом деле означает, хотя? По сути, вы можете использовать встроенные модули, такие как Promise, Set, Symbol и т. Д., А также использовать все функции Babel, которые требуют бесшовного заполнения, без глобального загрязнения, что делает его чрезвычайно подходящим для библиотек.

Он также включает поддержку async / await и других встроенных функций ES 6.

В .babelrc добавьте плагин времени выполнения

Примечание Если вы используете babel 7, пакет был переименован в @ babel / plugin- спектрально- среда.

Новый ответ Почему вы следуете моему ответу?

И . Потому что я собираюсь дать вам ответ с последней версией Обновления проекта npm.

Если вы используете эту версию или более UP-версию Npm и всех других . ТАК просто нужно поменять

webpack.config.js

После изменения webpack.config.js файлов Просто добавьте эту строку в начало вашего кода.

Теперь проверьте, все ли в порядке. Ссылочная ссылка

Также спасибо @BrunoLM за его хороший ответ.

для дальнейшего использования :

Начиная с версии 7.0.0-beta.55 Babel были удалены предустановки

Асинхронное ожидание все еще может быть использовано

установка

Использование в .babelrc

установка

webpack.config.js

Вавилон 7.4.0 или новее (core-js 2/3)

В общем, существует два способа установки полифилов / регенераторов: через глобальное пространство имен (вариант 1) или как ponyfill (вариант 2, без глобального загрязнения).

Вариант 1: @babel/preset-env

Будет автоматически использовать regenerator-runtime и core-js в соответствии с вашей целевой. Не нужно ничего импортировать вручную. Не забудьте установить зависимости во время выполнения:

В качестве альтернативы, установите useBuiltIns: "entry" и импортируйте его вручную:

Вариант 2: @babel/transform-runtime с @babel/runtime (без загрязнения глобальной области видимости)

Если вы используете полифилы core-js, вместо этого вы устанавливаете @babel/runtime-corejs2 или @babel/runtime-corejs3 , см. здесь .

Целевые браузеры, которые мне нужно поддерживать, уже поддерживают async / await, но при написании тестов mocha без правильной настройки я все еще получал эту ошибку.

Большинство статей, которые я гуглил, устарели, включая принятый ответ и ответы с высоким рейтингом здесь, то есть вам не нужны polyfill , babel-regenerator-runtime , babel-plugin-transform-runtime . и т. д. , если ваш целевой браузер (-ы) уже поддерживает async / await (если, конечно, вам не нужен polyfill)

Я тоже не хочу использовать webpack .

Ответ Тайлера Лонга на самом деле правильный, поскольку он предложил babel-preset-env (но сначала я его опустил, поскольку он упомянул полифилл в начале). Сначала я все еще получил ReferenceError: regeneratorRuntime is not defined , а потом понял, что это потому, что я не поставил цель. После установки цели для узла я исправляю ошибку регенератора:

В качестве альтернативы, если вам не нужны все модули, которые babel-polyfill предоставляет, вы можете просто указать babel-regenerator-runtime в конфигурации вашего веб-пакета:

При использовании webpack-dev-server с HMR это значительно уменьшило количество файлов, которые приходится компилировать в каждой сборке. Этот модуль установлен как часть babel-polyfill , так что если у вас уже есть все в порядке, в противном случае вы можете установить его отдельно с npm i -D babel-regenerator-runtime .

Я получаю эту ошибку, используя gulp with rollup, когда я пытался использовать генераторы ES6:

Я могу на всякий случай решить проблему, включив babel-polyfill в качестве компонента беседки:

И добавьте его в качестве зависимости в index.html:

babel-regenerator-runtime теперь устарела, вместо этого следует использовать > .

Чтобы использовать генератор времени выполнения с webpack и babel v7:

А затем добавьте в конфигурацию веб-пакета:

Я исправил эту ошибку, установив babel-polyfill

Затем я импортировал его в точку входа моего приложения

Для тестирования я включил --require babel-polyfill в свой тестовый скрипт

Так что этот ответ НЕ вполне подходит для исходного вопроса. Я буду хранить это здесь как ссылку на babel-preset-env .

Простое решение - добавить import 'babel-polyfill' в начале вашего кода.

Если вы используете веб-пакет, быстрое решение - добавить babel-polyfill , как показано ниже:

Используйте следующую конфигурацию вашего babel:

Тогда ваше приложение должно хорошо работать в последних 2 версиях браузера Chrome.

Мне очень нравится философия babel-preset-env : скажи мне, какую среду ты хочешь поддерживать, НЕ говори мне, как их поддерживать. Это красота декларативного программирования.

Я проверил async await , и они действительно работают. Я не знаю, как они работают, и я действительно не хочу знать. Вместо этого я хочу тратить свое время на собственный код и свою бизнес-логику. Благодаря babel-preset-env он освобождает меня от ада конфигурации Вавилона.

Мой рабочий babel 7 шаблон для реакции с временем работы регенератора:

Пользователи Babel 7

У меня были некоторые проблемы, потому что большая часть информации была для предыдущих версий Babel. Для Babel 7 установите эти две зависимости:

И в .babelrc добавьте:

Для пользователей babel7 и ParcelJS> = 1.10.0 пользователей

У меня была эта проблема в Chrome. Как и в ответе RienNeVaPlu, это решило это для меня:

Тогда в моем коде:

Рад избежать лишних 200 кБ от babel-polyfill .

Обновите ваш файл .babelrc в соответствии со следующими примерами, он будет работать.

Если вы используете @babel/preset-env пакет

Для тех, кто хочет использовать версию babel-polyfill 7 ^, сделайте это с webpack ver3 ^.

Npm установить модуль npm i -D @babel/polyfill

Затем в вашем webpack файле в вашей точке entry сделайте это

По состоянию на октябрь 2019 года это работало для меня:

Добавьте это в пресет.

Затем установите регенератор, используя npm.

А затем в вашем основном файле использовать: (этот импорт используется только один раз)

Это позволит вам использовать async awaits в вашем файле и удалить regenerator error

Это решение устарело.

Бет У 3 месяца назад (отредактировано)
Еще одно изменение, которое я должен был сделать в 2019 году, - babel больше не использует предустановки stage-0 начиная с версии 7, по-видимому, поэтому в 26:15 вместо 'npm install --save-dev babel-polyfill babel-preset-stage-0', Я должен был сделать:

npm install --save @babel/polyfill

Который охватывает оба старых варианта. Затем в точке входа для приложения я> включил '@ babel / polyfill', а в предварительных настройках запроса я оставил все как есть. Таким образом, конфиг веб-пакета выглядит примерно так:

Надеюсь, что это помогает кому-то!

Я использую проект React и Django и заставил его работать с помощью regenerator-runtime . Вам следует сделать это, потому что @babel/polyfill еще больше увеличит размер вашего приложения, а также является не рекомендуется. Я также следил за эпизодами 1 и 2 этого руководства, чтобы создать свой проекта.

2 - Добавьте в свой js babel polyfill:

3 - Добавьте плагин в ваш .babelrc:

Как уже упоминалось в других ответах, вы также можете использовать polyfills (хотя убедитесь, что вы сначала загрузите полизаполнение до запуска любого другого кода). В качестве альтернативы, если вы не хотите включать все зависимости полизаполнения, вы можете использовать babel-Регенератор-время выполнения или babel-plugin-transform-runtime.

Мое простое решение:

.babelrc

Если вы создаете приложение, вам просто нужны @babel/preset-env и @babel/polyfill :

(Примечание: вам не нужно устанавливать пакеты core-js и regenerator-runtime , потому что они оба будут установлены @ babel / polyfill)

Тогда в .babelrc :

Теперь установите ваши целевые среды. Здесь мы делаем это в файле .browserslistrc :

Наконец, если вы выбрали useBuiltIns: "entry" , поместите import @babel/polyfill вверху вашего файла ввода. В противном случае, вы сделали.

Использование этого метода будет выборочно импортировать эти полифиллы и файл 'регенератор-среда выполнения' (исправляя вашу проблему regeneratorRuntime is not defined здесь) ТОЛЬКО , если они нужны любой из ваших целевых сред / браузеров.

У меня была установка
с веб-пакетом , используя presets: ['es2015', 'stage-0']
и мокко , на котором выполнялись тесты, скомпилированные с помощью веб-пакета.

Чтобы заставить мой async/await в тестах работать, все, что мне нужно было сделать, это добавить параметр mocha --require babel-polyfill .

Если вы используете Gulp + Babel для внешнего интерфейса, вам нужно использовать babel-polyfill

npm install babel-polyfill

А затем добавьте тег script в index.html над всеми другими тегами сценария и укажите ссылку на babel-polyfill из node_modules

У меня были и мой «импорт полифилла», и моя «асинхронная функция» в одном и том же файле, однако я использовал синтаксис функции, который поднимает его над полифиллом, что приведет к ошибке ReferenceError: regeneratorRuntime is not defined .

Измените этот код

К этому

Чтобы он не поднимался над импортом полифилл.

Если вы используете babel-preset-stage-2 , просто запустите скрипт с --require babel-polyfill .

Файлы JS, такие как regenerator-runtime.js, классифицируются как файлы Сценарий (JavaScript). Как файл JavaScript он был создан для использования в UC Browser 7.0.185.1002 от компании UCWeb.

Файл regenerator-runtime.js изначально был выпущен с UC Browser 7.0.185.1002 01/08/2018 для ОС Windows 10. По нашим данным, этот файл является последним обновлением от компании UCWeb.




Совместимость с Windows 10, 8, 7, Vista, XP и 2000

Средняя оценка пользователей

Сведения о разработчике и ПО
Программа: UC Browser 7.0.185.1002
Разработчик: UCWeb
Программное обеспечение: UC Browser
Версия ПО: 7.0.185.1002
Сведения о файле
Размер файла (байты): 9283
Дата первоначального файла: 12/04/2019
Дата последнего файла: 12/04/2019
Информация о файле Описание
Размер файла: 9.1 kB
Дата и время изменения файла: 2019:12:04 02:31:49+00:00

✻ Фрагменты данных файлов предоставлены участником Exiftool (Phil Harvey) и распространяются под лицензией Perl Artistic.

Общие ошибки выполнения regenerator-runtime.js

Ошибки файла regenerator-runtime.js часто возникают на этапе запуска UC Browser, но также могут возникать во время работы программы. Эти типы ошибок JS также известны как «ошибки выполнения», поскольку они возникают во время выполнения UC Browser. К числу наиболее распространенных ошибок выполнения regenerator-runtime.js относятся:

  • Не удается найти regenerator-runtime.js.
  • regenerator-runtime.js — ошибка.
  • Не удалось загрузить regenerator-runtime.js.
  • Ошибка при загрузке regenerator-runtime.js.
  • Не удалось зарегистрировать regenerator-runtime.js / Не удается зарегистрировать regenerator-runtime.js.
  • Ошибка выполнения — regenerator-runtime.js.
  • Файл regenerator-runtime.js отсутствует или поврежден.

Программа: C:\Users\Tester\AppData\Local\UCBrowser\User Data_i18n\Default\Extensions\pogijhnlcfmcppgimcaccdkmbedjkmhi\0.8.5_0\lib\regenerator-runtime.js

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

В большинстве случаев причинами ошибок в JS являются отсутствующие или поврежденные файлы. Файл regenerator-runtime.js может отсутствовать из-за случайного удаления, быть удаленным другой программой как общий файл (общий с UC Browser) или быть удаленным в результате заражения вредоносным программным обеспечением. Кроме того, повреждение файла regenerator-runtime.js может быть вызвано отключением питания при загрузке UC Browser, сбоем системы при загрузке или сохранении regenerator-runtime.js, наличием плохих секторов на запоминающем устройстве (обычно это основной жесткий диск) или заражением вредоносным программным обеспечением. Таким образом, крайне важно, чтобы антивирус постоянно поддерживался в актуальном состоянии и регулярно проводил сканирование системы.

Шаг 1. Восстановите компьютер до последней точки восстановления, «моментального снимка» или образа резервной копии, которые предшествуют появлению ошибки.

Чтобы начать восстановление системы (Windows XP, Vista, 7, 8 и 10):

Если на этапе 1 не удается устранить ошибку regenerator-runtime.js, перейдите к шагу 2 ниже.


Шаг 2. Если вы недавно установили приложение UC Browser (или схожее программное обеспечение), удалите его, затем попробуйте переустановить UC Browser.

Чтобы удалить программное обеспечение UC Browser, выполните следующие инструкции (Windows XP, Vista, 7, 8 и 10):

После полного удаления приложения следует перезагрузить ПК и заново установить UC Browser.

Если на этапе 2 также не удается устранить ошибку regenerator-runtime.js, перейдите к шагу 3 ниже.


UC Browser 7.0.185.1002

Шаг 3. Выполните обновление Windows.


Если ни один из предыдущих трех шагов по устранению неполадок не разрешил проблему, можно попробовать более агрессивный подход (примечание: не рекомендуется пользователям ПК начального уровня), загрузив и заменив соответствующую версию файла regenerator-runtime.js. Мы храним полную базу данных файлов regenerator-runtime.js со 100%-ной гарантией отсутствия вредоносного программного обеспечения для любой применимой версии UC Browser . Чтобы загрузить и правильно заменить файл, выполните следующие действия:

Windows 10: C:\Users\Tester\AppData\Local\UCBrowser\User Data_i18n\Default\Extensions\pogijhnlcfmcppgimcaccdkmbedjkmhi\0.8.5_0\lib\

Если этот последний шаг оказался безрезультативным и ошибка по-прежнему не устранена, единственно возможным вариантом остается выполнение чистой установки Windows 10.

Я пытаюсь запустить карма-Бабель-препроцессора и прямой генератор ES6:

из этого я создал свои тестовые файлы (ES6 => ES5) с babel:

babel src --watch --out-dir tests

тогда я бегу karma start Я получаю ошибку:

ReferenceError: regeneratorRuntime не определен".

соответствующие биты в карму.conf.js:

Я могу использовать многие функции ES6, включая стрелки. Просто никаких генераторов.

в то время как я использую другой подход** к использованию кармы с Вавилоном в моем проекте, я подозреваю, что у вас та же проблема, что и у меня:Бабель полифилл не загружается, и поэтому вы не получаете функциональность, которую он поддерживает (включая пользовательскую среду выполнения регенератора, которую Babel использует для работы генераторов).

одним из подходов было бы найти способ включить polyfill, возможно, путем подачи его в Karma через массив файлов:

An альтернативным подходом может быть использование Babel's во время выполнения трансформатора [edit: при перечитывании документов это не будет работать, если вы затем не browserify/webpack/etc. для обработки require() вызовы, созданные трансформатора]; в его документы,

  • автоматически требует babel-runtime/regenerator при использовании генераторов / асинхронных функций.
  • автоматически требует babel-runtime/core-js и отображает статические методы ES6 и встроенные модули.
  • удаляет встроенные помощники babel и использует .

у меня нет опыта в этом, но я подозреваю, что вы сделаете это, включив optional: ['runtime'] опция из документов Babel в вашем babelPreprocessor config, viz.:

(** в настоящее время я использую jspm + jspm-karma + некоторую конфигурацию, чтобы загрузить Babel polyfill в SystemJS; спросите, если это необходимо, и я разъяснять.)

узел JS Env-обновлено декабрь 2015

на этот вопрос уже был дан ответ, см. принятый ответ, если он не работает в среде NodeJS.

затем вставить после require оператор к верхней части затронутого модуля, чтобы получить необходимое (генератор) поведение:

Это должно быть все, что вам нужно, просто импорт модуля добавляет необходимое поведение polyfill во время выполнения.

Читайте также: