Javascript 如何有条件地使用再生器运行时多填充?

Javascript 如何有条件地使用再生器运行时多填充?,javascript,reactjs,webpack,generator,babeljs,Javascript,Reactjs,Webpack,Generator,Babeljs,启发我将我为React应用程序加载的多边形填充外部化,并仅为需要它们的浏览器加载它们。一个简单的测试: function browserSupportsAllFeatures() { return window.Promise && window.fetch && window.regeneratorRuntime } 然后将确定是否应加载多边形填充: if (browserSupportsAllFeatures()) { // Browsers tha

启发我将我为React应用程序加载的多边形填充外部化,并仅为需要它们的浏览器加载它们。一个简单的测试:

function browserSupportsAllFeatures() {
  return window.Promise && window.fetch && window.regeneratorRuntime
}
然后将确定是否应加载多边形填充:

if (browserSupportsAllFeatures()) {
  // Browsers that support all features run `main()` immediately.
  main()
} else {
  // All other browsers loads polyfills and then run `main()`.
  loadScript('/path/to/polyfills.js', main)
}

function main(err) {
  // Initiate all other code paths.
  // If there's an error loading the polyfills, handle that
  // case gracefully and track that the error occurred.
}
然而,我在代码中使用了生成器,这似乎有点边缘化。据我所知,babel transforms generators()和传输的代码也需要定义
regeneratorRuntime
(使用)

因此,我的应用程序失败,因为导入
app
时(其中包含使用生成器的代码)未定义
retinatorruntime
。所以我的polyfills太晚了:

// import dependencies
import React from 'react'
import { render } from 'react-dom'
import { App } from './components/app'

const renderApp = () => {
  render(<App />, document.getElementById('app'))
}

function browserSupportsAllFeatures() {
  return window.Promise && window.fetch && window.regeneratorRuntime
}

if (browserSupportsAllFeatures()) {
  renderApp()
} else {
  loadScript('/path/to/polyfills.js', renderApp);
}
//导入依赖项
从“React”导入React
从'react dom'导入{render}
从“./components/App”导入{App}
常量renderApp=()=>{
render(,document.getElementById('app'))
}
函数browserSupportsAllFeatures(){
返回window.Promise&&window.fetch&&window.retinatorruntime
}
如果(browserSupportsAllFeatures()){
renderApp()
}否则{
loadScript('/path/to/polyfills.js',renderApp);
}
我知道我可以通过在顶部导入再生器来解决这个问题,但这里的目的是将多边形填充外部化并使其有条件


所以我的问题是,;如何继续使用生成器,但仍将多边形填充包含在
loadScript
调用中?

您可以使用以下方法检查属性:

if (window.hasOwnProperty("regeneratorRuntime")) ...
npm package polyfill io功能检测的功能与此完全相同,请查看此解决方案以了解其如何处理功能检测:

您可以使用以下方法检查属性:

if (window.hasOwnProperty("regeneratorRuntime")) ...
npm package polyfill io功能检测的功能与此完全相同,请查看此解决方案以了解其如何处理功能检测:
大多数现代浏览器都支持异步函数/生成器。 但是IE不支持它

据我所知,完全动态添加多边形填充是不可能的。因此,您必须为不支持它的浏览器(通常不支持es6)生成另一个应用包

有一篇文章很好地解释了如何做到这一点。


基本上,它依赖于大多数现代浏览器支持的异步函数/生成器。 但是IE不支持它

据我所知,完全动态添加多边形填充是不可能的。因此,您必须为不支持它的浏览器(通常不支持es6)生成另一个应用包

有一篇文章很好地解释了如何做到这一点。

基本上它依赖于