在这种情况下正确的语法是什么?

时间:2019-05-22 05:26:22

标签: javascript webstorm

我对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"
    ....

2 个答案:

答案 0 :(得分:1)

请检查您的node.js版本。 node.js 8.5.0+支持import语法(作为实验功能)。为了使用此功能,您需要:

  1. 如果使用旧版本的Node.js,则需要对其进行升级。

    您可以在Setting-> Language & Frameworks-> Node.js and NPM中找到WebStorm使用的node.js解释器,您可能会基于目录路径找到该版本(例如,在我的情况下它是8.12.0),或基于类似于node -v

    的命令

    enter image description here

  2. 将所有*.js文件重命名为*.mjs。例如将stack.js重命名为stack.mjs

  3. 使用mjs命令行参数运行--experimental-modules文件。如果使用命令行,则应使用类似于node --experimental-modules main.mjs的名称。如果您使用webstorm,则可以通过webstorm命令行参数对其进行配置(如屏幕截图所示)

    enter image description here enter image description here

但是,import / export语句并不是在node.js中进行模块化开发的最佳方法。它主要用于通过webpack进行的前端Web开发。通常在node.js中,我们使用requiremodule.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

enter image description here

答案 1 :(得分:0)

在Stack.js中,您是否要默认导出:

import Stack from './Stack".

然后,当您导入时,不需要进行分解(使用花括号),导入应该只是

{{1}}