Modernizr.flexbox 在 React 应用中 returns 'undefined'

Modernizr.flexbox in React app returns 'undefined'

我第一次尝试使用 Modernizr。按照示例并阅读文档,但我似乎遗漏了一些东西,因为我所有的测试都是 returning 'undefined'.

我正在用 create-react-app 创建的 React 应用程序中编写代码 我使用 this tutorial 作为要遵循的主要步骤。

所有代码和配置都在同一目录中

modernizr-config.json

{
  "minify": false,
  "options": [
  "setClasses"
  ],
    "feature-detects": [
    "test/css/flexbox",
    "test/css/flexboxlegacy",
    "test/css/flexboxtweener",
    "test/css/flexwrap"
  ]
}

React 组件代码

import React, { Component } from 'react';
import './App.css';
import Modernizr from './modernizr'

class App extends Component {
  render() {
    let qFlexbox = Modernizr.flexbox ? 'yes' : 'no'
    console.log(Modernizr.flexbox)
    let qFlexboxLegacy = Modernizr.flexboxlegacy ? 'yes' : 'no'
    console.log(Modernizr.flexboxlegacy)
    let qFlexboxTweener = Modernizr.flexboxtweener ? 'yes' : 'no'
    console.log(Modernizr.flexboxtweener)
    let qFlexWrap = Modernizr.flexwrap ? 'yes' : 'no'
    console.log(Modernizr.flexwrap)

    return (
      <div className="App">

        <ul>
          <li>flexbox: {qFlexbox}</li>
          <li>flexboxlegacy: {qFlexboxLegacy}</li>
          <li>flexboxtweener: {qFlexboxTweener}</li>
          <li>flexwrap: {qFlexWrap}</li>
        </ul>
      </div>
    );
  }
}

export default App;

所有 'if' 语句 return 'no' 和所有 console.log 语句 'undefined'

您不应该像那样导入 modernizr 构建,因为它是一个 IIFE。这意味着每次导入文件时,它都会免除所有测试。在 SPA 的上下文中,由于执行了多个测试,您最终可能会在 HTML 标记中得到很多 类。除此之外,该函数不 return 任何值,而是将结果附加到 window 对象。这就是为什么您的测试 returning undefined.

要让它工作,您需要对 modernizr 构建输出应用一些更改,以使其作为 ES6 模块工作。您可以在此处找到一个工作示例:https://github.com/fcaldera/modernizr-try. Check the commits 以了解您需要应用哪些更改。

虽然这可行,但它并不理想,因为如果您重新创建构建以添加更多测试或其他内容,您将不得不执行相同的操作,但这是一个开始并且并不难做到。