【发布时间】:2020-02-11 12:22:01
【问题描述】:
我有一个 ApolloServer 项目给我带来了麻烦,所以我想我可能会更新它并在使用最新的 Babel 时遇到问题。我的“index.js”是:
require('dotenv').config()
import {startServer} from './server'
startServer()
当我运行它时,我得到了错误
SyntaxError: Cannot use import statement outside a module
首先,我尝试让 TPTB* 相信这是一个模块(没有成功)。所以我将“import”更改为“require”,这很有效。
但现在我在其他文件中有大约两打“imports”给我同样的错误。
*我确定我的问题的根源在于我什至不确定是什么在抱怨这个问题。我有点假设它是 Babel 7(因为我来自 Babel 6,我不得不更改预设)但我不是 100% 确定。
我找到的大部分解决方案似乎都不适用于直接节点。喜欢这个:
ES6 module Import giving "Uncaught SyntaxError: Unexpected identifier"
说它是通过添加“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",
【问题讨论】:
-
嗨,现在遇到同样的问题。您还可以分享您的依赖项吗?更新前后甚至可能存在差异。我可以检查一下我的,看看我们是否能找到可能导致问题的类似包。
-
我刚刚用“requires”替换了所有的“imports”,现在一切都很好。愚蠢,但现在不值得努力弄清楚。不过,我将使用依赖项更新原始版本。如果你有任何线索,我会对照我的原始代码检查它们。
-
CommonJS 语法(require 和 module.exports)是 node 的原始格式,webpack 也支持它,但是 ES6 模块语法(export,import)是更新的方式,现在 node 和 webpack 支持它。我读到 node 现在支持导入,但是很多教程都显示需要纯 node 的东西,所以最好使用 node 的语法。
-
最后,对我来说,要走的路似乎是这样的:github.com/vuejs/vue-jest/issues/134#issuecomment-461755061 将
jest.config.js中的预设设置为'ts-jest/presets/js-with-ts'- 还有一些其他问题,但这解决了大问题。 .....嗯,是的,我的问题是测试相关的......正常的构建很好 -
"type":"module"没有解决我的问题,imports有一百多个。require的语法与imports不同,不是一个简单的替换。你能举例说明imports是如何被requires替换的吗?
标签: javascript node.js node-modules package.json npm-package