我对 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
使用
--experimental-modules
命令行参数运行您的mjs
文件。如果你使用命令行,你应该使用类似于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
。
关于javascript - 这种情况的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249827/