首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的“导入”语句是否被错误地转移了?

我的“导入”语句是否被错误地转移了?
EN

Stack Overflow用户
提问于 2016-09-03 18:17:46
回答 1查看 679关注 0票数 2

以下两行等价于我的理解

代码语言:javascript
复制
const Up = require('write-up').default

还有..。

代码语言:javascript
复制
import Up from 'write-up'

这两个示例都应该使write-up模块的默认导出可用为Up

不幸的是,使用巴贝尔和Webpack,这不是我看到的行为。

第一个例子运行得很好。它产生了这条线:

代码语言:javascript
复制
var Up = __webpack_require__(5).default;

Up设置为write-up模块的默认导出,这是我所期望的行为。

第二个例子不起作用。它产生了这样的结果:

代码语言:javascript
复制
var _writeUp = __webpack_require__(5);

var _writeUp2 = _interopRequireDefault(_writeUp);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

不是将Up设置为默认导出,而是将Up设置为包含write-up模块(其中包括default字段)的每个导出的对象。

我做错了什么?

下面是Webpack配置的相关部分:

代码语言:javascript
复制
{
  test: /.js$/,
  loader: 'babel-loader',
  exclude: /node_modules/,
  query: {
    presets: ['es2015']
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-03 19:38:42

Babel编译的import语句具有双重行为。如果正在导入的模块是从ES6 export语句中编译的,那么

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

会表现得很像

代码语言:javascript
复制
const foo = require('foo').default;

但是,如果foo不是用Babel编译的,或者是试图与Babel兼容的东西,那么就Babel而言,它没有特殊的行为,并且是一个普通的CommonJS模块。在这种情况下,这似乎是你的情况,它将表现为

代码语言:javascript
复制
const foo = require('foo');

Babel是这样做的,这样您就可以导入普通的CommonJS模块,比如

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

其中,fs是一个标准节点模块,没有.default属性。

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

https://stackoverflow.com/questions/39310027

复制
相关文章

相似问题

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