为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2022-06-16 15:08:03
我今天正在学习 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 代码上执行此操作。请帮助我了解我错过了什么。谢谢
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

从 .js 重命名 .mjs 就成功了。谢谢@昆汀!

.mjs 是除了 require {} 之外的两种玩转导出-导入 javascript 的方法之一。

详解: https ://medium.com/passpill-project/files-with-mjs-extension-for-javascript-modules-ced195d7c84a


查看完整回答
反对 回复 2022-06-16
?
撒科打诨

TA贡献1934条经验 获得超2个赞

了解 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


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信