Webpack Babel 加载错误 - Uncaught SyntaxError: Unexpected token import [重复]

Posted

技术标签:

【中文标题】Webpack Babel 加载错误 - Uncaught SyntaxError: Unexpected token import [重复]【英文标题】:Webpack Babel loading error - Uncaught SyntaxError: Unexpected token import [duplicate] 【发布时间】:2016-11-19 05:15:29 【问题描述】:

我是 Webpack 的新手,在 this tutorial 之后遇到了问题。

似乎 webpack.config.js 没有正确设置 babel-loader 但我不确定。在控制台中我看到以下错误:

bundle.js:49 Uncaught SyntaxError: Unexpected token import

指的是我的index.jsimport sortBy from 'lodash/collection/sortBy'; 行。所以我认为这是一个 babel 转译问题(不允许 ES6 的 import 语法?)

这是完整的index.js 文件

import sortBy from 'lodash/collection/sortBy';
import users from './users';
import User from './User';

sortBy(users, 'name')
    .map(user => 
        return new User(user.name, user.age);
    )
    .forEach(user => 
        console.log(user.display);
    );

webpack.config.js 看起来像这样:

module.exports = 
    entry: './src/index.js',
    output: 
        path: './public/',        
        filename: 'bundle.js'
    ,
    devServer: 
        contentBase: './public/'
    ,
    module: 
        loaders: [
            test: /\.js$/, exclude: /node_modules/, loader: 'babel'
        ]
    
 

我搜索了其他看起来与问题here 和here 相关的问题,并四处搜索,但还没有找到解决方案或我收到错误的原因。也许本教程已过时。任何如何解决此问题的指导将不胜感激!

更新

按照 Alexandre Thebaldi 下面发布的答案中概述的步骤解决了特定的 babel 加载错误。

但是,发生了一个新错误 - Module not found: Error: Cannot resolve module 'lodash/collection/sortBy'

如果您正在通过this tutorial 工作并遇到此错误,则很可能是由index.js 中的路径不正确引起的,特别是lodash/collections 目录似乎不再存在的事实。我设法通过简单地将路径更改为lodash/sortBy 来解决第二个错误。

注意

请务必先检查lodash 是否安装在node_modules 中,并且在更改之前手动手动检查路径是否正确。

【问题讨论】:

【参考方案1】:

首先,确保你已经安装了 babel core 和 loader 使用:

$ npm install --save-dev babel-loader babel-core

所以正确的加载器是babel-loader 而不是babel。配置应该是:

module: 
  loaders: [
     test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" 
  ]


其实你需要告诉 babel 转换你的代码。

在 6.x 之前,Babel 默认启用了某些转换。但是,Babel 6.x 没有启用任何转换。您需要明确告诉它要运行哪些转换。最简单的方法是使用预设,例如 ES2015 预设。你可以安装它。

$ npm install babel-preset-es2015 --save-dev

预设安装后,您必须启用它。

在您的项目根目录中创建一个.babelrc 配置并启用一些插件。

假设你已经安装了 ES2015 Preset,为了启用它 您必须在 .babelrc 文件中定义它,如下所示:


  "presets": ["es2015"]

Babel Setup 页面中的详细信息。

【讨论】:

太好了,感谢您的及时帮助。按照说明进行操作,得到一个新错误Module not found: Error: Cannot resolve module 'lodash/collection/sortBy'。我检查了lodash目录,发现没有collection子目录。所以我改变了'lodash/sortBy' 的路径,然后它就起作用了。很遗憾,教程遗漏了 babel 配置的一大块。 再次感谢您解决核心问题。我已接受您的回答并更新了我的问题,以包含针对单独问题 Module not found: Error: Cannot resolve module 'lodash/collection/sortBy' 的修复程序。希望它也能帮助任何人在关注后续错误时得到帮助相同的教程。 我的问题没有解决 *import Config from './util/config'; ^^^^^^ SyntaxError: Unexpected token import *【参考方案2】:

麦克米

这是 babel-loader 和 ES6 的问题。

你能把你的 webpack.config.js 改成这样吗:

    module.exports = 
    entry: './src/index.js',
    output: 
        path: './public/',        
        filename: 'bundle.js'
    ,
    devServer: 
        contentBase: './public/'
    ,
    module: 
        loaders: [
            test: /\.js$/, exclude: /node_modules/, loader: 'babel?presets[]=es2015' 
        ]
    
 

【讨论】:

感谢您的建议。我设法让它工作并在上面的答案中发布了步骤。干杯! 我的问题没有解决 * import Config from './util/config'; ^^^^^^ SyntaxError: Unexpected token import *

以上是关于Webpack Babel 加载错误 - Uncaught SyntaxError: Unexpected token import [重复]的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 webpack 和 babel 加载 css 时出现意外令牌

Webpack - Babel - 解析 JSX: SyntaxError: Unexpected token

Babel 与 webpack 加载器

如何预加载 webpack4+babel 捆绑的 CSS @font-face 字体?

Webpack中无法加载babel ES6解析

使用反应延迟加载时在 Edge 上出现 SCRIPT1028 错误