JavaScript中的导出导入--- SyntaxError:无法在模块外部使用import语句

时间:2020-04-06 13:49:13

标签: javascript node.js

我今天正在学习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 时,出现以下错误使我震惊:

(节点:47205)警告:要加载ES模块,请在以下位置设置“ type”:“ module” package.json或使用.mjs扩展名。 / Users / rammurthys / Documents / Angular Tute / JS / b.js:1导入用户{f} 来自'./a.js'; ^^^^^^

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

如果我运行节点a.js ,则会引发如下错误。

(节点:47321)警告:要加载ES模块,请在以下位置设置“ type”:“ module” package.json或使用.mjs扩展名。 / Users / rammurthys / Documents / Angular Tute / JS / a.js:1导出默认 类用户{^^^^^^

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

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

请帮助我了解我在想什么。谢谢

2 个答案:

答案 0 :(得分:1)

从.js重命名.mjs达到了目的。谢谢@昆汀!

.mjs是除了需要{}之外还可以使用导出和导入javascript的两种方法之一。

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

答案 1 :(得分:1)

重要的是要了解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