2

次の 2 行は同等であると理解しています

const Up = require('write-up').default

と...

import Up from 'write-up'

write-upどちらの例も、モジュールのデフォルトのエクスポートを として利用できるようにする必要がありますUp

残念ながら、Babel と Webpack を使用すると、これは私が見ている動作ではありません。

最初の例は問題なく動作します。次の行が生成されます。

var Up = __webpack_require__(5).default;

Upモジュールのデフォルトのエクスポートに設定されていますwrite-up。これは私が期待する動作です。

2 番目の例は機能しませ。それはこれを生成します:

var _writeUp = __webpack_require__(5);

var _writeUp2 = _interopRequireDefault(_writeUp);

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

Upデフォルトのエクスポートに設定する代わりに、モジュール (フィールドを含む)Upのすべてのエクスポートを含むオブジェクトに設定されます。write-updefault

私は何を間違っていますか?

Webpack 構成の関連部分は次のとおりです。

{
  test: /.js$/,
  loader: 'babel-loader',
  exclude: /node_modules/,
  query: {
    presets: ['es2015']
  }
}
4

1 に答える 1

1

Babel でコンパイルされたimportステートメントには、二重の動作があります。インポートされるモジュールが、Babel を使用して ES6exportステートメントからコンパイルされた場合、

import foo from 'foo';

(ほとんど)のように動作します

const foo = require('foo').default;

しかし、fooBabel でコンパイルされていない場合、または Babel と互換性を保とうとするものである場合、Babel に関する限り、特別な動作はなく、通常の CommonJS モジュールです。あなたのケースのように見えるその場合、次のように動作します

const foo = require('foo');

Babel はこれを行い、通常の CommonJS モジュールをインポートできるようにします。

import fs from 'fs';

wherefsは標準の Node モジュールであり、.defaultプロパティはありません。

于 2016-09-03T19:38:42.973 に答える