我试图在babel和Node.js中使用Node.js imorts
import "./utils.js";
log("something"); //throw an error : log is not defined我的utils.js看起来是这样的:
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()而不以模块变量名作为前缀。就像在这篇博客文章
发布于 2016-01-22 23:03:36
否,无法将模块的所有导出成员导入当前命名空间。导入一个副作用模块(即import 'utils')对utils的成员不起任何作用。
你能得到的最接近的是这样的东西:
utils.js
export function log(...params) { ... }
export function foo(a) { ... }main.js
import * as u from './utils';
u.log(1, 2, 3);
u.foo(4);或
import { log, foo } from './utils';
log(1, 2, 3);
foo(4);ES6模块规范的设计目标之一是静态模块结构,它允许在编译时(在执行任何操作之前)解析导入。允许毛毯进口将使静态分析更加困难。
编辑(不要这样做!)
正如@Bergi在注释中所指出的,您可以将函数添加到全局命名空间,如下所示:
utils.js
function log(...params) { ... }
global.log = log;main.js
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然而,,这是一个不好的主意,。全局变量的解析速度很慢,通常首先要通过使用模块来打破您试图实现的模块化。
发布于 2016-01-22 20:59:11
有不同的ES6 import和Node.js require 问题描述了差异
以防万一您将使用Node.js require
您的utils.js文件将
function log(params) {
console.log(params);
}
module.exports = {
log
};另一个文件将导入您的Utils模块
var utils = require('./utils');
utils.log("test");,万一,您将使用ES6模块:
您的utils.js文件将
var log = function (params) {
console.log(params);
}
var utils = {
log: log
}
export default utils;另一个文件将导入您的Utils模块
import utils from 'utils';
utils.log("test");更新
根据你的评论,是的,您可以这样做,但是可以使用ES6模块
您的utils.js文件将
function log(params) {
console.log(params);
}
function anotherLog(params) {
console.log(params);
}
export { log, anotherLog }另一个文件将导入您的Utils模块
import { log } from 'utils';
log("test");https://stackoverflow.com/questions/34955456
复制相似问题