使用 babel 将 JSX 转换为 JS

Posted

技术标签:

【中文标题】使用 babel 将 JSX 转换为 JS【英文标题】:Transform JSX to JS using babel 【发布时间】:2017-08-24 00:14:20 【问题描述】:

我是 babel 新手,我正在尝试将我的 main.jsx 文件转换为 main.js。我安装了以下 babel 插件。

npm install --save-dev babel-plugin-transform-react-jsx

在应用程序根目录中创建了一个名为 .babelrc 的文件。


   "plugins": ["transform-react-jsx"]

我的应用正在使用 express 服务器,因此在运行 node app.js 时,我期待 babel 将 main.jsx 转换为 main.js,但没有任何反应。 谁能指出我做错了什么?

【问题讨论】:

你在哪里运行babel 命令?此外,react 预设可能更适合在.babelrc 中使用。 【参考方案1】:

如果你只是使用 babel 将 jsx 转换为 js,这就是你需要的:

安装

babel-cli 安装为全局(可选)sudo npm install -g babel-cli 安装babel-preset-es2015(可选。如果您的代码使用es6标准)npm install babel-preset-es2015 安装babel-preset-react(必填)

配置

在您的项目根目录中,添加此文件 .babelrc 并将其写入其中


  "presets": ["es2015", "react"]


  "presets": ["react"]

运行

babel source_dir -d target_dir

【讨论】:

【参考方案2】:

只需按照https://www.npmjs.com/package/babel-plugin-transform-react-jsx的说明进行操作

首先,创建一个新文件夹test,并从该文件夹中启动一个新项目:

npm init

安装 babel CLI

npm install --save-dev babel-cli

然后安装 babel-plugin-transform-react-jsx

npm i babel-plugin-transform-react-jsx

test 文件夹中创建一个示例jsx 文件index.jsx

var profile = <div>
  <img src="avatar.png" className="profile" />
  <h3>[user.firstName, user.lastName].join(' ')</h3>
</div>;

最后,在您的终端中从test 文件夹运行转换命令:

.\node_modules\.bin\babel --plugins transform-react-jsx index.jsx

您将在终端窗口中看到输出。

【讨论】:

这给了我以下错误:Uncaught ReferenceError: require is not defined。如何将它包含在 babel 中?【参考方案3】:

你可以配置 webpack 并使用 babel 作为加载器到 transpile 你的 jsx

var webpack = require('webpack');
var path = require('path');

module.exports =

    context: path.join(__dirname, "src"),
    devtool: "inline-sourcemap",
    entry: "./main.js",
    module: 
        loaders: [
            
                test: /\.js?$/,
                exclude: /node_modules/,
                loader: 'babel-loader',
                query: 
                    presets: ['react', 'es2015','stage-0'],

                
            
        ]
    ,
    output: 
        path: __dirname+ "/src",
        filename: "client.min.js"
    

Tutorials

【讨论】:

以上是关于使用 babel 将 JSX 转换为 JS的主要内容,如果未能解决你的问题,请参考以下文章

JSX

服务器端 React:Babel 不会在服务器上转换 JSX,既不是动态也不是手动转换。为啥?

`babel-preset-react` 不使用 gulp 转换 jsx

如何使用 Babel-Standalone 在客户端 React JSX 中执行导入/导出

使用JSX的注意事项

[ECMAScript] 说说你对Babel的了解?