我对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,则需要对其进行升级。

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

javascript - 在这种情况下正确的语法是什么?-LMLPHP
将所有*.js文件重命名为*.mjs。例如将stack.js重命名为stack.mjs
使用mjs命令行参数运行--experimental-modules文件。如果使用命令行,则应使用类似于node --experimental-modules main.mjs的名称。如果您使用webstorm,则可以通过webstorm命令行参数进行配置(如屏幕截图所示)

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


但是,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

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

07-24 09:39
查看更多