首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6导入“模块”不能访问“模块”的功能

ES6导入“模块”不能访问“模块”的功能
EN

Stack Overflow用户
提问于 2016-01-22 20:32:08
回答 2查看 4.4K关注 0票数 0

我试图在babel和Node.js中使用Node.js imorts

代码语言:javascript
复制
import "./utils.js";

log("something"); //throw an error : log is not defined

我的utils.js看起来是这样的:

代码语言:javascript
复制
function log(... params){
    console.log(... params);
}

log("module utils executed");
//Is executed and display "module utils executed" in the console.

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

所以我不明白这是怎么回事。

编辑:

我知道导入的另一种方法是执行import utils from "./utils.js"

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-22 23:03:36

否,无法将模块的所有导出成员导入当前命名空间。导入一个副作用模块(即import 'utils')对utils的成员不起任何作用。

你能得到的最接近的是这样的东西:

utils.js

代码语言:javascript
复制
export function log(...params) { ... }
export function foo(a) { ... }

main.js

代码语言:javascript
复制
import * as u from './utils';
u.log(1, 2, 3);
u.foo(4);

代码语言:javascript
复制
import { log, foo } from './utils';
log(1, 2, 3);
foo(4);

ES6模块规范的设计目标之一是静态模块结构,它允许在编译时(在执行任何操作之前)解析导入。允许毛毯进口将使静态分析更加困难。

编辑(不要这样做!)

正如@Bergi在注释中所指出的,您可以将函数添加到全局命名空间,如下所示:

utils.js

代码语言:javascript
复制
function log(...params) { ... }
global.log = log;

main.js

代码语言:javascript
复制
import './utils';  // import for side effects, add properties to the global object
log(1, 2, 3);      // the global object is in the scope chain, so this is resolved

然而,,这是一个不好的主意,。全局变量的解析速度很慢,通常首先要通过使用模块来打破您试图实现的模块化。

票数 4
EN

Stack Overflow用户

发布于 2016-01-22 20:59:11

有不同的ES6 import和Node.js require 问题描述了差异

以防万一您将使用Node.js require

您的utils.js文件将

代码语言:javascript
复制
function log(params) {
    console.log(params);
}

module.exports = {
   log
};

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

代码语言:javascript
复制
var utils = require('./utils');
utils.log("test");

,万一,您将使用ES6模块:

您的utils.js文件将

代码语言:javascript
复制
var log = function (params) {
    console.log(params);
}

var utils = {
    log: log
}

export default utils;

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

代码语言:javascript
复制
import utils from 'utils';

utils.log("test");

更新

根据你的评论,是的,您可以这样做,但是可以使用ES6模块

您的utils.js文件将

代码语言:javascript
复制
function log(params) {
    console.log(params);
}

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

export { log, anotherLog }

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

代码语言:javascript
复制
import { log } from 'utils';

log("test");
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34955456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档