RequireJS + Babel + JSX

eja*_*ang 5 amd requirejs reactjs react-jsx babeljs

我正在尝试使用Babel调用浏览器内的JSX转换.

我正在使用以下内容在浏览器中加载AMD JS模块:

require(["nbextensions/ht"] function(ext){});
Run Code Online (Sandbox Code Playgroud)

最终导入这个"ui"模块,它调用了一个函数来渲染JSX.然而,这似乎并没有触发Babel的浏览器内JSX变换器.甚至可以在RequireJS上下文中调用Babel的JSX Transformer吗?

var BOWER = '/nbextensions/ht/bower_components'
var COMPONENTS = '/nbextensions/ht/components'
var NODE_MODULES = '/nbextensions/ht/node_modules'

requirejs.config({
  paths: {
    es6: NODE_MODULES + "/requirejs-babel/es6",
    babel: NODE_MODULES + "/requirejs-babel/babel-5.8.22.min"
  }
})

define([
  BOWER + '/react/react.min.js',
  "es6!" + COMPONENTS + "/App.jsx"
],function(React, App){
  console.log("Loaded React v" + React.version)

  var ui = {}
  ui.render = function() {
    React.render(<App/>, document.getElementById("ht_main"))
  }

  return ui
})
Run Code Online (Sandbox Code Playgroud)

eja*_*ang 1

啊,想通了。这里使用的方法https://github.com/podio/requirejs-react-jsx确实有效,但是 RequireJS JSX 转换仅适用于导入的模块(main.js 不能混合 JSX)。

因此,Component 模块应该简单地包装在一个向 React.render 公开 render() 方法的函数原型中。

请参考 github 页面上的示例。