javascript - 这种情况的正确语法是什么?
问题描述
我对JS感到困惑。我写了一个 Stack 的伪实现,它保存在自己的文件中。我想在一个单独的文件中“创建”一个 Stack 对象,但是,WebStorm 告诉我一个语法错误。请参阅下面的错误:
import Stack from "./Stack"
^^^^^
SyntaxError: Unexpected identifier
at Module._compile (internal/modules/cjs/loader.js:718:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
at Module.load (internal/modules/cjs/loader.js:641:32)
at Function.Module._load (internal/modules/cjs/loader.js:556:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:837:10)
at internal/main/run_main_module.js:17:11
根据其他用户最近的建议,这是我在测试器文件中调用导入的方式:
// Stack.js
class Stack {
....
}
export default Stack
// StackTester.js driver file
import Stack from "./Stack"
....
解决方案
请检查您的 node.js 版本。node.js 8.5.0+ 支持该import
语法(作为实验性功能)。要使用此功能,您需要:
如果您使用旧版本的 Node.js,则需要对其进行升级。
WebStorm 使用的 node.js 解释器可以在
Setting
->Language & Frameworks
->Node.js and NPM
中找到,您可能会根据目录路径找到版本(例如,在我的情况下它是 8.12.0),或者基于类似的命令node -v
将所有
*.js
文件重命名为*.mjs
. 例如重命名stack.js
为stack.mjs
使用命令行参数运行您的
mjs
文件。--experimental-modules
如果你使用命令行,你应该使用类似于node --experimental-modules main.mjs
. 如果你使用 webstorm,你可以通过 webstorm 命令行参数来配置它(如截图所示)
但是,import
/export
语句并不是在 node.js 中进行模块化开发的最佳方式。它主要用在 webpack 的前端 Web 开发中。通常在 node.js 中,我们使用require
and module.export
,它应该类似于
// In stack.js
class Stack {
}
module.export = {Stack}
// In main.js
const {Stack} = require('./stack.js')
此外,如果 Webstorm 在编辑器中显示警告消息,您可能需要在 Webstorm 中启用 ES6 语法。
Setting
-> Language & Frameworks
-> JavaScript
,在 的下拉列表中JavaScript Language Version
选择ECMAScript 6
。
推荐阅读
- android-studio - Android Studio 3.3 在布局预览中以不同语言显示 textview 文本
- scala - Jupyter Notebook (Scala, kernel - Apache Toree) with Vegas, 图表不显示数据
- mpeg-dash - 在 MP4Box 中为每个表示分离初始段
- javascript - 如何从原型函数中仅获取参数值
- javascript - Xrm.WebApi.online.execute 帮助创建通知
- macos - 'Connection' 对象在 macOS 上没有属性 'ssh' ansible?
- java - 为什么模式正则表达式 [0-9a-z]{6} 不替换?
- python - 链接 python app docker 和 postgress docker
- excel - How to Fix Graphs not copying over to new sheet with PasteSpecial
- db2 - IBM DB/2 i - SQL 从 Json_Table 中选择 JSON_VAL"