Показать сообщение отдельно
  #1 (permalink)  
Старый 25.12.2015, 15:30
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

webpack, es6-модули, default и все дела
Пишу, значит, на TypeScript NPM-пакет и использую es6-модули:

Код:
export default function sqr(a: number): number {
    return a * a;
}
ES-6 модулей нигде в живую нет, так что TypeScript, как и Babel гоняет экспорт через объект, где для дефолтного экспорта используется поле default:

function sqr(a) {
    return a * a;
}
exports["default"] = sqr;


Задно я хочу чтобы эту библиотеку можно было по старинке подключить в браузере. Собираю через webpack, с указанием глобальной переменной.
Конфиг вебпака:

module.exports = {
    context: __dirname,
    entry: "./index.js",
    output: {
        path: __dirname,
        filename: "browser-version.js",
        library: "mySqr"
    }
};


Собирается это в следующий код:

var mySqr =
    (function(modules) { // webpackBootstrap
    
    // ...
    
    ([
    function(module, exports) {

	function sqr(a) {
	    return a * a;
	}
	exports["default"] = sqr;

/***/ }
/******/ ]);



То есть в браузере у нас теперь доступна переменная mySqr. Вот только из-за манипуляций с es6-модулями в этой переменной не сама исходная функция, а объект {default: sqr}.

Можно ли как-то указать webpack'у, чтобы он обрабатывал такие ситуации. Либо более общий случай - указать поле которое следует импортировать из модуля, вместо модуля целиком.

В зарубежных интернетах нашёл десяток похожих тем, но нигде нет решения. Может быть они чего-то не знают?
Ответить с цитированием