【问题标题】:JSX not transpiling with Gulp and BabelJSX 不使用 Gulp 和 Babel 进行编译
【发布时间】:2017-08-08 06:41:30
【问题描述】:

我有一个 Gulp 脚本,我试图用它来启动一个 React 应用程序。

  • Gulp 文件名为gulpfile.babel.js
  • 我正在添加 Babel 预设 'env' 作为选项
  • 同目录下还有一个.babelrc文件,预设选项相同

Gulp 文件包括:

const gulp = require('gulp');
const browserSync = require('browser-sync').create();
const babel = require('gulp-babel');

// convert jsx to JS
gulp.task('babelFiles', function() {
    return gulp.src('js/*.@(js|jsx)')
        .pipe(babel({
            compact: false,
            presets: ['env'],
            }))
        .pipe(gulp.dest('js'))
        .pipe(browserSync.reload({
            stream: true
        }));
});


// Default task
gulp.task('default', ['babelFiles', 'browserSync']);

// Configure the browserSync task
gulp.task('browserSync', ['babelFiles'], function() {
    browserSync.init({
        server: {
            baseDir: ''
        },
    })
})

当 Gulp 任务启动时,我看到一个关于意外令牌的错误:

  29 |         return (
> 30 |             <div>
     |             ^

这告诉我反应设置中的 JSX 转译有问题?你会碰巧知道这里可能出现什么问题吗?

【问题讨论】:

    标签: reactjs ecmascript-6 gulp babeljs


    【解决方案1】:

    babel-preset-env 不包含将 JSX 转换为纯 JavaScript 的预设。为此,您需要babel-preset-react:

    npm i --save-dev babel-preset-react
    

    然后应用它:

    presets: ['env', 'react']
    

    babel-preset-env 确定您的 JavaScript 需要哪些插件,例如 ES2015、2016 和 2017 的插件。但是,它不考虑诸如 JSX 之类的东西。

    【讨论】:

    • 看起来 Gulp/Babel 工作正常,但 index.js 文件更改为具有 react 语法,例如“var _react = require('react');”。然后我在控制台中看到一个错误,要求未定义。这是否意味着我需要将 requireJS 添加到我的网站?解决此问题的最简单方法是什么?
    • @mm2887 你必须使用 Webpack 来打包你的 web 项目。
    • 有没有办法利用 Gulp 来做到这一点?我基本上是在尝试将 React 添加到基于 Bootstrap 的网站上,该网站已经有一个包含大量工作任务的 Gulp 文件。
    • @mm2887 你可以使用gulp-webpack
    • 谢谢 - 我会试试看
    猜你喜欢
    • 2017-03-25
    • 1970-01-01
    • 2016-08-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多