【问题标题】:Can't get es6 to work with Gulp无法让 es6 与 Gulp 一起工作
【发布时间】:2017-08-05 02:18:39
【问题描述】:

这让我发疯了,所以我希望有人能看到我错过的东西。提前感谢您的帮助。

我有一个 gulp 文件,我已经通过 npm、babel-core、babel-preset-es2015、babel-preset-react 安装。通过在线研究并寄予厚望,即使这可能不正确,我已将 gulp 文件重命名为 gulpfile.babel.js 并使用

创建了一个 .babelrc 文件
{
  "presets": ["es2015"]
}

我正在使用 browsersync,当我启动 gulp 任务时,会加载 html 文件,但我拥有的 index.js 包含“import React ....”。此文件导致 JS 控制台中出现“未捕获的语法错误:意外的令牌导入”错误。

我认为我拥有的 es2015 npm 包应该处理 ES6 语法?

在 gulp 文件中,我认为应该处理的任务是;

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

负责启动它的 gulp 任务是:

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

我很困惑这里可能有什么问题?

任何想法将不胜感激!

【问题讨论】:

  • 这可能只是因为在您的“默认”调用中,任务“babelfiles”和“browserSync”的顺序不能保证以任何可预测的顺序完成。这些任务是并行运行的。所以也许 browserSync 试图在 babelFiles 有机会 babelify 之前加载你的 js。我会尝试使 'browserSync 任务依赖于 babelFiles 任务。
  • @Mark:我将 babelFiles 任务设置为 browserSync 任务的先决条件,但仍然遇到同样的问题。

标签: npm ecmascript-6 gulp babeljs


【解决方案1】:

有两个问题:

  1. Gulp 似乎不支持文件扩展名掩码的语法:

    gulp.src('js/*.(jsx|js)') // not working
    gulp.src('js/*.{js,jsx}') // working
    
  2. 您从 js 目录管道到 js 目录但由于问题 (1) 没有匹配项,这让您相信 babel 无法正常工作

更新

Gulp 使用 glob syntaxt 匹配文件 - 根据 glob 语法,项目数量的限定符应包含在 ( | ) 之前 - 在我们的例子中,以下语法是有效的

gulp.src('js/*.@(js|jsx)')

其中@ 表示在@ 之后恰好匹配一次出现的模式。

在您的情况下,没有提供限定符

【讨论】:

  • 这似乎解决了 babelFiles 任务未运行的问题,但随后我在控制台中收到有关 .jsx 反应语法的错误。它说“需要外部模块 babel-core/register”作为输出的一部分。如果已经安装了该软件包,所以我尝试删除模块文件夹并再次运行 npm install。同样的错误。 :/。有什么想法吗?
  • 然后我不知道有什么可以帮助的 - 因为我在最新版本的 node.js 上从你的示例中得到了一切工作(除了重命名 gulpfile.js)
猜你喜欢
  • 2014-02-19
  • 2015-04-27
  • 2015-12-17
  • 1970-01-01
  • 2020-02-29
  • 2011-04-25
  • 2014-11-22
  • 2014-05-15
  • 2010-10-16
相关资源
最近更新 更多