JavaScript 中的导出-导入 --- SyntaxError: 不能在模块外使用导入语句

我今天正在学习 JavaScript。我在同一目录中创建了两个文件“a.js”“b.js”。


a.js 代码


    export default class User {

    constructor(n) {

        this._a = n;

    }

}


export function f(n) {

    console.log("Funct");


}

b.js 代码:


import User, {f} from './a.js';


var u = new User("hey");


console.log(u, u._a);


f();

当我运行node b.js时,遇到如下错误:


(node:47205) 警告:要加载 ES 模块,请在 package.json 中设置 "type": "module" 或使用 .mjs 扩展名。/Users/rammurthys/Documents/Angular Tute/JS/b.js:1 导入用户,{f} from './a.js'; ^^^^^^


语法错误:无法在 Object.Module 的 Module._compile (internal/modules/cjs/loader.js:1103:27) 的 wrapSafe (internal/modules/cjs/loader.js:1055:16) 的模块外使用 import 语句。 _extensions..js (internal/modules/cjs/loader.js:1159:10) 在 Module.load (internal/modules/cjs/loader.js:988:32) 在 Function.Module._load (internal/modules/cjs /loader.js:896:14) 在 Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) 在 internal/main/run_main_module.js:17:47


如果我运行node a.js,它会抛出如下错误。


(node:47321) 警告:要加载 ES 模块,请在 package.json 中设置 "type": "module" 或使用 .mjs 扩展名。/Users/rammurthys/Documents/Angular Tute/JS/a.js:1 导出默认类 User { ^^^^^^


SyntaxError:在 Object.Module._extensions 的 Module._compile (internal/modules/cjs/loader.js:1103:27) 的 wrapSafe (internal/modules/cjs/loader.js:1055:16) 处出现意外的令牌“导出”。 .js (internal/modules/cjs/loader.js:1159:10) 在 Module.load (internal/modules/cjs/loader.js:988:32) 在 Function.Module._load (internal/modules/cjs/loader .js:896:14) 在 Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) 在 internal/main/run_main_module.js:17:47


我正在使用节点 v13.5.0。在 VS 代码上执行此操作。


请帮助我了解我错过了什么。谢谢


白衣染霜花
浏览 205回答 2
2回答

收到一只叮咚

从 .js 重命名 .mjs 就成功了。谢谢@昆汀!.mjs 是除了 require {} 之外的两种玩转导出-导入 javascript 的方法之一。详解: https ://medium.com/passpill-project/files-with-mjs-extension-for-javascript-modules-ced195d7c84a

撒科打诨

了解 NodeJS 不是 ES6 很重要。您正在尝试做的是 ES6 规范的一部分。默认情况下,NodeJS 中并非所有内容都可用,这.mjs就是需要扩展的原因。一旦 ES6 在不久的将来完成,NodeJS 也将能够添加支持。我不建议使用.mjs扩展。最好使用像 Babel 这样的转译器。Babel 将您的 ES6 代码编译成 NodeJS,而无需更改文件的扩展名。可以在这里找到类似的信息:https ://medium.com/the-node-js-collection/an-update-on-es6-modules-in-node-js-42c958b890c
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript