意外的令牌导入 - 使用react和node

时间:2017-01-17 18:21:06

标签: node.js reactjs ecmascript-6 babeljs

运行我的反应应用时遇到错误:Uncaught SyntaxError: Unexpected token import

我知道这里有很多类似的问题,但我认为我的情况有点不同。首先,这是存储库,因为我不确定错误的确切位置:repo

我正在使用create-react-app,并且在一个单独的后端目录中我使用babel(带有包含预设es2015的.babelrc文件)。应用程序工作正常,直到我在后端文件夹(/backend/shared/validations/signup.js)的新目录中添加了另一个文件 我之前也在使用es6,它工作得非常好。首先我认为这是Windows的一些问题,但我在我的Ubuntu笔记本电脑上克隆了回购,我在那里得到了同样的错误。

我尝试过的一些事情:

  • 将整个文件夹从/ backend移动到根文件夹
  • 随处移动文件(signup.js)

所以无论文件在哪里,错误都保持不变。如果我删除整个文件及其所有引用,该应用程序将再次运行。

我认为这个错误非常奇怪,考虑到我在应用程序中的其他地方使用es6没有遇到任何麻烦。如果有人能帮我解决这个错误,那将会很棒。

编辑:如果你想在你自己的机器上测试它,只需克隆repo并在根文件夹中运行npm start(以及后端文件夹中的npm start,但这不是应用程序运行或出现错误所必需的。

1 个答案:

答案 0 :(得分:0)

这就是发生的事情:

您的webpack设置为仅在src文件夹(include指令)中运行babel加载程序。

要改变这种情况,一种方法是:

1)使用npm run eject解压缩webpack配置(不知道是否有其他方法可以覆盖react-create-app中的设置)。来自文档:

  

运行npm run eject会复制所有配置文件和   传递依赖(Webpack,Babel,ESLint等)直接进入你的   项目,所以你可以完全控制它们。

config/paths.js中的

2),添加appShared密钥,如下:

module.exports = {
  /* ... */
  appSrc: resolveApp('src'),
  appShared: resolveApp('backend/shared'),
  /* ... */
};
config/webpack.config.dev.js中的

3),添加babel加载程序的路径,如下所示:

{
  test: /\.(js|jsx)$/,
  include: [ paths.appSrc, paths.appShared ],
  loader: 'babel',
  /* ... */
},

现在有效!