Библиотека Webpack umd возвращает Object.default

Я пишу lib с веб-пакетом с этими настройками:

output: {
    path: path.join('build'),
    filename: 'my_lib.js',
    library: 'MyLib',
    libraryTarget: 'umd'
  },

Моя библиотека:

export default function() {
  console.log('MyLib');
}

Проблема в том, что когда я пытаюсь загрузить build/my_lib.js в браузере, единственный способ получить доступ к MyLib - через MyLib.default...

Есть идеи?


person gtournie    schedule 12.01.2016    source источник


Ответы (3)


Если вы спрашиваете, почему?

Если вы используете Babel для включения функций ES6, то вы, вероятно, столкнулись с одним из изменений между Babel5 и Babel6.

С Babel5 ваш код переносится на это:

'use strict';

Object.defineProperty(exports, '__esModule', {
  value: true
});

exports['default'] = function () {
  console.log('MyLib');
};

module.exports = exports['default'];

Но с Babel6 вы получаете:

'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

exports.default = function () {
  console.log('MyLib');
};

Вы видите разницу?

module.exports = exports['default'];

Эта строка была убита в Babel6. Здесь было решено:

Чтобы всегда экспортировать значение по умолчанию в exports.default

Если вы спрашиваете о какой-либо идее обходного пути?

Вы можете добавить эту строку самостоятельно или использовать какой-нибудь плагин для Babel, который добавляет ее для ты.

const myLib = function () {
  console.log('MyLib');
};

export default myLib;

module.exports = myLib;
person dreyescat    schedule 13.01.2016
comment
Пожалуйста, проголосуйте за запрос функции здесь: github.com/webpack/webpack/issues/3929 ;) - person Luckylooke; 02.05.2017

Вы должны установить libraryExport на default;

https://webpack.js.org/configuration/output/#outputlibraryexport

person Jack Pu    schedule 30.12.2019

ключ в том, чтобы использовать libraryExport: "default" следующим образом:

  module.exports = {
    entry: ...,
    output: {
      path: __dirname + "/dist/",
      filename: "Template.js",
      library: "Template",
      libraryTarget: "umd",
      libraryExport: "default",
      globalObject: "this",
    },
person Dorian    schedule 25.12.2020