我对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"
....
答案 0 :(得分:1)
请检查您的node.js版本。 node.js 8.5.0+支持import
语法(作为实验功能)。为了使用此功能,您需要:
如果使用旧版本的Node.js,则需要对其进行升级。
您可以在Setting
-> Language & Frameworks
-> Node.js and NPM
中找到WebStorm使用的node.js解释器,您可能会基于目录路径找到该版本(例如,在我的情况下它是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
和module.export
,它应该类似于
// In stack.js
class Stack {
}
module.export = {Stack}
// In main.js
const {Stack} = require('./stack.js')
此外,如果在编辑器中显示警告消息,则可能需要在Webstorm中启用ES6语法。
Setting
-> Language & Frameworks
-> JavaScript
,在JavaScript Language Version
的下拉列表中,选择ECMAScript 6
。
答案 1 :(得分:0)
在Stack.js中,您是否要默认导出:
import Stack from './Stack".
然后,当您导入时,不需要进行分解(使用花括号),导入应该只是
{{1}}