ES6导入“模块”不提供对“模块”功能的访问

Emr*_*oin 0 javascript import node.js ecmascript-6

我正在尝试将 ES6 imorts 与 babel 和 Node.js 一起使用

import "./utils.js";

log("something"); //throw an error : log is not defined
Run Code Online (Sandbox Code Playgroud)

我的utils.js样子是这样的:

function log(... params){
    console.log(... params);
}

log("module utils executed");
//Is executed and display "module utils executed" in the console.
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用export function log(... params)andexport default log(... params)但它不起作用。

所以我不明白这是如何运作的......

编辑:

我知道另一种导入方式是import utils from "./utils.js"

但这不是我想要的。我希望能够使用log()而不用模块变量名作为前缀。就像这篇博文一样

ahm*_*mdy 6

有不同的 ES6import和 Node.jsrequire 问题 描述差异

如果您将使用 Node.js require

你的utils.js文件将是

function log(params) {
    console.log(params);
}

module.exports = {
   log
};
Run Code Online (Sandbox Code Playgroud)

另一个文件将导入您的 Utils 模块

var utils = require('./utils');
utils.log("test");
Run Code Online (Sandbox Code Playgroud)

如果您将使用 ES6 模块:

你的utils.js文件将是

var log = function (params) {
    console.log(params);
}

var utils = {
    log: log
}

export default utils;
Run Code Online (Sandbox Code Playgroud)

另一个文件将导入您的 Utils 模块

import utils from 'utils';

utils.log("test");
Run Code Online (Sandbox Code Playgroud)

更新

根据您的评论,是的,您可以做到这一点,但是使用 ES6 模块

你的utils.js文件将是

function log(params) {
    console.log(params);
}

function anotherLog(params) {
    console.log(params);
}

export { log, anotherLog }
Run Code Online (Sandbox Code Playgroud)

另一个文件将导入您的 Utils 模块

import { log } from 'utils';

log("test");
Run Code Online (Sandbox Code Playgroud)