错误:在目录“/Users/username”相对于找不到预设“es2015”

88

当我尝试使用gulp-babel时,出现以下错误:

错误:无法找到相对于目录“/Users/username”中的预设“es2015”

我已经在全局和本地安装了es2015预设,所以不知道为什么会出现这个问题。

以下是我的gulp设置和package.json文件。

var babel = require('gulp-babel');
var es2015 = require('babel-preset-es2015');

gulp.task('babel', function() {
    return gulp.src('./app/main.js')
    .pipe(babel({
        presets: [es2015]
    }))
    .pipe(gulp.dest('dist'));
});

Package.json

  "devDependencies": {
    "babel-preset-es2015": "^6.3.13",
    "babel-preset-es2015-node5": "^1.1.1",
    "browser-sync": "^2.11.0",
    "gulp": "^3.9.0",
    "gulp-babel": "^6.1.1",
    "gulp-stylus": "^2.2.0"
  }

我正在使用node v5.1.0和babel v6.4.0

这里是终端输出

终端输出


我认为你需要在presets数组中传递一个字符串,例如['es2015'],但我不是很确定。 - thefourtheye
@thefourtheye 谢谢,但是和字符串一样的问题。 - Brian Douglas
你不需要使用gulp。也许这就是问题所在:var gulp = require('gulp'); - Andrei CACIO
@AndreiCacio,我已经包含了 gulp,只是它不在代码片段中。我只包含了与 babel 编译器相关的代码。 - Brian Douglas
3
您的家目录中是否有一个名为.babelrc的文件?因为它正在寻找预设,这意味着该配置来自那里。请注意,我已经尽力使翻译更加通俗易懂,但没有改变原本的意思。 - loganfsmyth
12个回答

122

你只需要安装babel-preset-es2015

命令行使用示例:

npm install babel-cli babel-preset-es2015

3
这对我解决了问题...哇,多么糟糕的错误信息:Error: Couldn't find preset "es2015" relative to directory "/path/to/node/package/attemping/to/install" ... 尤其是在尝试安装某些使用gulp和babel的随机npm包时更加痛苦。 - Scott Stensland
2
npm警告:babel-preset-es2015@6.24.1已弃用:感谢您使用Babel:我们建议现在使用babel-preset-env:请阅读babeljs.io/env进行更新! - Syed
非常感谢您提供的这个令人惊喜的解决方案。 - Pawan

14
为了解决这个问题,您应该从“/Users/username”目录中删除.babelrc(隐藏)文件。

完美。这确实是一个非常难以发现的问题。对我来说解决了。 - Amgad
这个答案救了我。 - JackChouMine

12

"es2015"是指:

    .pipe(babel({
        presets: ['es2015']
    }))

实际上是一个路径 - 所以如果您没有在/Users/username/es2015目录中预设,您必须像这样准确指向它:

.pipe(babel({
    presets: ['../../gulp/node_modules/babel-preset-es2015']
}))

它适用于我


同样对我有效的是使用绝对路径到“babel-preset-es2015”文件夹。 - valkalon
这可能看起来过于简单,所以我只是将其作为评论添加,但请确保您拼写正确。我的标签名称为“es2105”,但数字位置颠倒了一下,这让我困惑了一段时间。 - Robert Oschler

8
我刚刚使用了这个确切的gulpfile.js文件。
var babel = require('gulp-babel');
var es2015 = require('babel-preset-es2015');
var gulp = require('gulp');

gulp.task('babel', function() {
    return gulp.src('./app/main.js')
    .pipe(babel({
        presets: [es2015]
    }))
    .pipe(gulp.dest('dist'));
});

对我而言,这很有效。我只安装了babelbabel-preset-es2015以及gulp-babel


请问一下您使用的 Babel 和 Node 的版本号。我使用的也是相同的设置,但仍然出现了相同的错误。 - Brian Douglas
我正在使用Node 4.0和Babel 6。 - Andrei CACIO
另一个相关的帖子:https://dev59.com/uVsX5IYBdhLWcg3wAbe6 - Andrei CACIO
谢谢,不幸的是我已经看过这两个了。我会继续寻找解决方案。 - Brian Douglas
1
明确加载 babel-preset-es2015,就像这里展示的那样,解决了我的问题。 - givemesnacks
显示剩余4条评论

8
您可以尝试通过安装es2015stage-2来解决问题。
npm i babel-preset-es2015 --save
npm i babel-preset-stage-2 --save

7

检查您的项目根文件夹中是否有 .babelrc 文件。如果没有,请创建 .babelrc 文件并添加以下内容:

{
  "presets": ["es2015"]
}

问题已经得到解决。


4
我遇到了同样的问题,原因是我在根目录下有一个名为.babelrc的文件。
要解决此问题,请在babel选项中添加babelrc: false
var babel = require('gulp-babel');

gulp.task('babel', function() {
    return gulp.src('./app/main.js')
    .pipe(babel({
        babelrc: false,
        presets: ['babel-preset-es2015']
    }))
    .pipe(gulp.dest('dist'));
});

我发现在我的根目录中有一个 .babelrc 文件,这就是问题所在。配置 babelrc: false 似乎没有起作用,但当我删除它时就一切正常了! - overallduka

3
我曾经遇到了同样的问题,第二个建议帮助我注意到了我的问题,也许你也会有这个问题。
我运行了npm install gulp-babel-es2015,但是在gulpfile中没有包含它。
然后babel({presets: ['es2015']})选项只是一个字符串,就像这里的示例所示:https://www.npmjs.com/package/gulp-babel
以下是我的gulpfile。

var gulp = require('gulp'),
    babel = require('gulp-babel');

gulp.task('babelify', () => {
    gulp.src('js/*.js')
        .pipe(babel({
            presets: ['es2015']
        }))
    .pipe(gulp.dest('alljs'));
});

gulp.task('default', ['babelify']);

此外,根据https://github.com/laravel/elixir/issues/354的问题,建议您将node更新到5.x.x版本,并将npm更新到3.x.x版本。


1
我遇到这个问题的情况是,我将文件从xxx移动到xxx/server。然后在xxx/server下,我会看到Error: Couldn't find preset "es2015" relative to directory "/Users/username/xxx"错误。 真正的原因是我忘记将.babelrc文件移动到xxx下。当我将.babelrc移动到xxx/server时,错误消失了。

0

Babel 7 更新

docs 开始,你现在应该使用 @babel/preset-env 代替其他任何 preset 的提及。

"env" 预设已经发布一年多了,完全取代了我们之前推荐的一些预设。

  • babel-preset-es2015
  • babel-preset-es2016
  • babel-preset-es2017
  • babel-preset-latest
  • 以上几种的组合 ^
yarn add @babel/preset-env

或者

npm install @babel/preset-env

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接