我有一个ApolloServer项目,它给我带来了麻烦,所以我想我可能会更新它,但在使用最新的Babel时遇到了问题。我的index.js是:

require('dotenv').config()
import {startServer} from './server'
startServer()

当我运行它时,我得到了错误

SyntaxError: Cannot use import statement outside a module

首先,我试图说服TPTB*这是一个模块(没有成功)。所以我把“import”改成了“require”,这就成功了。

但现在我在其他文件中有大约24个“导入”给我同样的错误。

*我敢肯定我问题的根源是我甚至不知道抱怨的是什么。我有点假设它是巴别塔7(因为我来自巴别塔6,我不得不改变预设),但我不是100%确定。

我发现的大多数解决方案似乎并不适用于直节点。比如这个:

ES6模块导入给出“未捕获SyntaxError:意外标识符”

说它是通过添加“type=module”来解决的,但这通常会在HTML中,其中我没有。我也尝试使用我的项目的旧预设:

"presets": ["es2015", "stage-2"],
"plugins": []

但这又给了我另一个错误:“错误:插件/预设文件不允许导出对象,只能导出函数。”

以下是我开始时的依赖关系:

"dependencies": {
"@babel/polyfill": "^7.6.0",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-server": "^2.9.6",
"babel-preset-es2015": "^6.24.1",

当前回答

文档很混乱。我使用Node.js在我的计算机上执行一些本地任务。

让我们假设我的旧脚本是test.js。在里面,如果我想用的话

import something from "./mylocalECMAmodule";

它会抛出一个这样的错误:

(node:16012) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
SyntaxError: Cannot use import statement outside a module
...

这不是模块错误,而是Node.js错误。禁止加载“模块”之外的任何东西。

要解决这个问题,只需将旧脚本test.js重命名为test.mjs。

这是所有。

其他回答

对于那些和我一样在阅读答案时感到困惑的人,在你的包裹里。Json文件,添加 “类型”:“模块” 在上层如下图所示:

{
  "name": "my-app",
  "version": "0.0.0",
  "type": "module",
  "scripts": { ...
  },
  ...
}

我也有同样的问题,下面已经修复了它(使用Node.js 12.13.1):

将.js文件扩展名更改为.mjs 在运行应用程序时添加——experimental-modules标志。 可选:在package.json中添加"type": "module"

更多信息:https://nodejs.org/api/esm.html

我在运行迁移时遇到了这个问题

这是es5 vs es6的问题

下面是我的解决方法

我跑

npm install @babel/register

并添加

require("@babel/register")

在我的.sequelizerc文件的顶部

继续运行我的sequelize migrate。 这也适用于除了sequelize之外的其他事情

巴别塔负责翻译

根据官方文件:

import语句只允许在ES模块中使用。要了解CommonJS中的类似功能,请参见import()。

为了让Node.js把你的文件当作ES模块,你需要(启用):

在package.json中添加"type": "module" 在Node.js调用中添加"——experimental-modules"标志

如果你想使用BABEL,我有一个简单的解决方案!

记住这是nodejs的例子:像一个expressJS服务器!

如果您打算使用react或其他框架,请查看babel文档!

首先,安装(不要安装不必要的东西,这只会破坏你的项目!)

npm install --save-dev @babel/core @babel/node

只有2个WAO

然后配置你的巴别塔文件在你的回购!

文件名称:

babel.config.json

{
    "presets": ["@babel/preset-env"]
}


如果你不想使用通天塔文件,使用:

在你的控制台运行,script.js是你的入口点!

npx babel-node --presets @babel/preset-env -- script.js

完整的信息在这里;https://babeljs.io/docs/en/babel-node