我有一个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",

当前回答

如果有人在使用TypeScript时遇到了这个问题,对我来说,解决它的关键是改变

    "target": "esnext",
    "module": "esnext",

to

    "target": "esnext",
    "module": "commonjs",

在我的tsconfig.json中。我的印象是“esnext”是“最好的”,但这只是一个错误。

其他回答

我的解决方案是在运行nodemon时包含babel-node路径,如下所示:

nodemon node_modules/.bin/babel-node index.js

你可以加入你的套餐。Json脚本如下:

debug: nodemon node_modules/.bin/babel-node index.js

注意:我的入口文件是index.js。将其替换为您的入口文件(许多有app.js/server.js)。

手动升级后,我的NX工作空间出现了这个错误。每个jest.config.js中的以下更改修复了它:

transform: {
  '^.+\\.(ts|js|html)$': 'jest-preset-angular',
},

to

transform: {
  '^.+\\.(ts|mjs|js|html)$': 'jest-preset-angular',
},

如果您正在为Node.js版本12运行nodemon,请使用此命令。

Server.js是里面的“主”包。Json文件,将其替换为包内的相关文件。json文件:

nodemon --experimental-modules server.js

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

这是es5 vs es6的问题

下面是我的解决方法

我跑

npm install @babel/register

并添加

require("@babel/register")

在我的.sequelizerc文件的顶部

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

巴别塔负责翻译

为了让你的导入工作并避免其他问题,比如模块不能在Node.js中工作,请注意:

在ES6模块中,你还不能导入目录。你的导入应该是这样的:

import fs from './../node_modules/file-system/file-system.js'